利用反射与接口访问数据库的区别
来源:互联网 发布:3c证书编号 淘宝 编辑:程序博客网 时间:2024/05/16 11:07
今天上课,老师讲了一个很小的通用性的访问数据库和程序,主要是利用反射,写了一个数据库类,进行增删改查……
下面是代码:
public class CommonDao {private Connection con;private PreparedStatement ps;private ResultSet rs;public boolean add(Object obj){StringBuffer sql = new StringBuffer("insert into ");Class cls = obj.getClass();String tableName = cls.getSimpleName().toLowerCase();sql.append(tableName+"(");System.out.println(tableName);ArrayList values = new ArrayList();Field[] fs = cls.getDeclaredFields();for(int i=0;i<fs.length;i++){String colName = fs[i].getName().toLowerCase();if(!colName.equals("id")){String methodName = "get"+fs[i].getName().substring(0, 1).toUpperCase()+fs[i].getName().substring(1);Method m = null;Object value = null;try {m = cls.getDeclaredMethod(methodName, null);value = m.invoke(obj, null);} catch (Exception e) {e.printStackTrace();} values.add(value);if(i<fs.length-1){sql.append(colName+", ");}else{sql.append(colName+") values(");}}}for (int i=0;i<values.size();i++){Object value = values.get(i);if(i<values.size()-1){sql.append("?, ");}else{sql.append("?)");}}System.out.println(sql.toString());//保存usertry {con = DBUtil.getConnection();ps = con.prepareStatement(sql.toString());for (int i=0;i<values.size();i++){Object value = values.get(i);//if(value instanceof java.util.Date){////}Class c = value.getClass();if(c.getName().equals("java.util.Date")){Date d = (Date)value;java.sql.Date sd = new java.sql.Date(d.getTime());value = sd;}ps.setObject(i+1, value);}return ps.executeUpdate()>0?true:false;} catch (SQLException e) {e.printStackTrace();return false;} finally{DBUtil.close(con);}}public boolean update(Object obj){//修改userreturn false;}public Object findById(int id,Class cls){return null;}public List find(Class cls){return null;}public boolean deleteById(int id,Class cls){return false;}public static void main(String[] args) {UserInfo user = new UserInfo("admin","123456");ProductInfo pro = new ProductInfo("杯具",20.8,new Date());EmployeeInfo emp = new EmployeeInfo("张三",3000.00,new Date(),"销售部门");CommonDao dao = new CommonDao();dao.add(emp);dao.findById(1, UserInfo.class);}}
看看代码确实觉得不错,通用性很强,下课后问老师,这样代码通用性看似很强,跟我以前学的老是提倡用面向接口编程,不同……
老师,这个通用性并不是很强,只适用于一个数据库,当需要数据库转移的时候,就不能了,这样就需要使用接口,针对每一种数据库操作都需要写一个接口实现,数据库转移的时候,就不需要重写了……
- 利用反射与接口访问数据库的区别
- 利用JAVA反射机制访问ITelephony隐藏接口
- 利用JAVA反射机制访问ITelephony隐藏接口
- 利用反射访问类的私有成员
- 简单实用 利用反射机制写的JAVA数据库访问控制框架
- 利用反射访问数组
- 用反射+配置文件实现数据库的访问
- 用反射+配置文件实现数据库的访问
- 利用反射获取SQL数据库的对象
- 利用JAVA反射机制访问ITelephony隐藏接口(android程序中挂断电话)
- 利用反射获取子类,父类,接口的信息
- 如何利用反射去访问一个私有的方法
- java利用反射访问类的私有成员
- Java利用反射访问私有构造函数的例子
- 利用ODBC访问WINCC的历史数据库
- 利用ODBC访问WINCC的历史数据库
- 利用ODBC访问WINCC的历史数据库
- SpringBoot第二讲利用Spring Data JPA实现数据库的访问(二)_分页和JpaSpecificationExecutor接口介绍
- 内联汇编(inline assembler) 的相关资料
- 新手学习数据结构与算法---快速排序算法
- HttpContext.Current.User.Identity.IsAuthenticated 这个是表示的什么
- 3.4 long parameter list(过长参数列)
- 配置BlogEngine容易出错的地方及解决办法——HTTP 错误 404.2 - Not Found
- 利用反射与接口访问数据库的区别
- apue.h头文件(unix环境高级编程)
- 时间复杂度为O(n)的排序算法--计数算法
- 新手学习数据结构与算法---直接选择排序
- Ubuntu 11.10 下安装 JDK_6_27
- 一个基数排序(桶子算法)算法的例子
- c++中把int转化为char
- 配置BlogEngine的问题总结
- ubuntu11.10 安装谷歌拼音输入法详细步骤