#jdbc2笔记
-
使用连接池,这样可以提高DAO连接数据库的性能
-
引入一个结果集处理接口,这样可以使MyJdbcTemplate根据需求的不能,能处理不同的结果. ##引入连接池 导包 druid-1.0.9.jar
这里使用的阿里巴巴的连接池.
新建DruidUtil类public class DruidUtil { private static DataSource ds=null; static{ //获取properties对象 Properties prop=new Properties(); InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("dbcp.properties"); try { prop.load(is); } catch (IOException e1) { e1.printStackTrace(); } try { //通过数据源工厂获取数据源 ds=DruidDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); } } //测试用返回数据源 public static DataSource getDS(){ return ds; } //返回connection对象 public static Connection getConn(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } public static void close(Connection conn, ResultSet rs, PreparedStatement ps) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally { if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
} } } } 复制代码
} ##引入结果集
-
新建一个处理结果集的接口
public interface ResultHandle{ T handle(ResultSet rs); }
-
修改MyJdbcTemplate中的查询方法,使用结果处理器处理结果
public static T find(String sql, ResultHandle rsh, Object... obj) { Connection conn = JdbcUtil.getConn(); PreparedStatement ps = null; T t = null; try { ps = conn.prepareStatement(sql); for (int i = 0; i < obj.length; i++) { ps.setObject(i + 1, obj[i]); } ResultSet rs = ps.executeQuery(); t = rsh.handle(rs); } catch (Exception e) { e.printStackTrace(); } finally { JdbcUtil.close(conn, ps, null); }
return t; 复制代码
}
-
实现了ResultHandle的处理结果集类
处理list结果集public class BeanListHandle implements ResultHandle<List>{ private Class clazz; public BeanListHandle(Class clazz){ this.clazz=clazz; } @Override public List handle(ResultSet rs) { List list=new ArrayList(); try { while(rs.next()){ T t=clazz.newInstance(); BeanInfo beanInfo = Introspector.getBeanInfo(clazz, Object.class); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor pd : pds) { String name = pd.getName(); Method method = pd.getWriteMethod(); method.invoke(t,rs.getObject(name)); } list.add(t);
} } catch (Exception e) { e.printStackTrace(); } return list; } 复制代码
}
处理查询数量的结果集
public class CountHandle implements ResultHandle<Long>{
@Override
public Long handle(ResultSet rs) {
try {
while(rs.next()){
return rs.getLong(1);
}
} catch (SQLException e) {
e.printStackTrace();
}
return 0L;
}
}
复制代码