#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;
}
}
複製程式碼