java JDBC通用BaseDao升级版0.3
2016-04-01 12:59
393 查看
,此次升级为了解决查询时每次都要转成对象集合,实现方式泛型加反射(那个流行的框架又没用到反射呢),能反射对象就能反射SQL语句,能反射SQL语句你和hibernate框架就很接近
package com.sun.dao; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Vector; /** * @author sun bo * @version 1.3, 2015/12/21 * 这次升级为了解决每次查询是都要换成对象集合的烦恼 */ public class BaseDao<T>{ final String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; private String ip = "localhost"; private String databaseName; private String user = "sa"; private String password = "123456"; /** * 用于构建连接数据库 * * @param ip * 数据库地址 * @param databaseName * 数据库的库名 * @param user * 数据库登陆用户名 * @param password * 数据库密码 */ public BaseDao(String ip, String databaseName, String user, String password) { super(); this.ip = ip; this.databaseName = databaseName; this.user = user; this.password = password; } /** * 这个构造用于连接本机的数据库 * * @param databaseName * :数据库名 */ public BaseDao(String databaseName) { super(); this.databaseName = databaseName; } /** * 用于创建连接对象 * * @return Connection * @throws SQLException */ private Connection createConnection() throws SQLException { return DriverManager.getConnection("jdbc:sqlserver://" + ip + ":1433;database=" + databaseName, user, password); } /** * 此方法只能用于查询 * * @param sql * :查询sql语句 * @param obj * :SQL语句给值 * @param sun * 请传入你要查询的对象 * @return :list: * 在list里放的是泛型对象, * ...obj:应用JDK1.5新特性,可以传1个值或数组方便使用 */ public ArrayList<T> excuteQuery(String sql,Object ...obj,Class<T> sun) { Connection con=null; PreparedStatement ps=null; ResultSet rs=null; try{ Class.forName(driver); con=createConnection(); ps=con.prepareStatement(sql); if(obj!=null&& obj.length>0) { for (int i = 0; i < obj.length; i++) { ps.setObject(i+1, obj[i]); } } rs=ps.executeQuery(); ArrayList list=new ArrayList(); if(rs!=null) { ResultSetMetaData data=rs.getMetaData(); while(rs.next()) { //创建泛型对象 Object o=Class.forName(sun.getName()).newInstance(); //获得查询的数据库有多少列 int count=data.getColumnCount(); for (int i = 0; i < count; i++) { //获得列名 String columnName=data.getColumnName(i+1);//id //获得列值 Object value= rs.getObject(i+1); //setId //生成要执行的方法,因为方法的的第二个单词大写所有需要转换大小写 String methodName="set"+columnName.replace(columnName.charAt(0)+"", new String(columnName.charAt(0)+"").toUpperCase()); //System.out.println(columnName.replace(columnName.charAt(0)+"", new String(columnName.charAt(0)+"").toUpperCase())); //System.out.println(methodName); //利用反射机制,生成setXX()方法的Method对象并执行该setXX()方法。 Method method=o.getClass().getMethod(methodName, value.getClass()); method.invoke(o, value); } list.add(o); } return list; }else{ return null; } }catch(Exception e){ e.printStackTrace(); return null; }finally{ if(rs!=null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(ps!=null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(con!=null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } /** * 此方法只能执行增删改 * * @param sql * :查询sql语句 * @param obj * :SQL语句给值 * @return 真假: */ public boolean excuteUpdate(String sql, Object[] obj) { Connection con = null; PreparedStatement ps = null; try { Class.forName(driver); con = createConnection(); ps = con.prepareStatement(sql); if (obj != null && obj.length > 0) { for (int i = 0; i < obj.length; i++) { ps.setObject(i + 1, obj[i]); } } int a = ps.executeUpdate(); if (a > 0) { return true; } else { return false; } } catch (Exception e) { e.printStackTrace(); return false; } finally { if(ps!=null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(con!=null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
相关文章推荐
- Java入门:一些初学者需要掌握的基础算法程序——二分查找
- java JDBC通用BaseDao升级版0.2
- JAVA JDBC通用BaseDao版0.1
- Openfire4.0.2源码部署到Eclipse
- MAVEN 工程打包resources目录外的更多资源文件
- java中Socket编程
- java集合的讲解
- JAVA·多线程:线程优先级
- springMVC4(2)请求映射全面分析
- 找不到或无法加载主类 com.sun.tools.javac.Main
- [JAVA · 初级]:14.数组
- 解析java中对象的"引用"
- Java处理java.util.ConcurrentModificationException异常
- 【撸码师的备忘录】 Java bean 与 xml 互相转化-JDK Marshaller
- 10分钟-JavaWeb入门-登陆功能实现
- maven中解决javax.servlet.jsp.PageContext cannot be resolved to a type
- sqoop.Sqoop: Got exception running Sqoop: java.lang.IllegalArgumentException: There is no column fou
- java中怎么把原始目录下的文件。复制到另外一个目录中,并且文件名不改掉
- java的守护线程与非守护线程
- Java入门:一些初学者需要掌握的基础算法程序——逆序输出