???????????????ResultSetMetaData??????DBUtils???????????????
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了???????????????ResultSetMetaData??????DBUtils???????????????相关的知识,希望对你有一定的参考价值。
?????????shm override update time ?????? ???????????? ?????????????????? ?????? cti
??????DBUtils???????????????JDBC?????????,??????????????????????????????,???????????????????????????,?????????JDBC???????????????.??????????????????????????????????????????????????????????????????????????????????????????????????????????????????,??????DBUtils??????????????????????????????????DBUtils????????????????????????,???????????????????????????DBUtils?????????,??????????????????????????????????????????.??????
??????ResultSetMetaData???????????????ResultSet??????????????????????????????????????????.??????????????????????????????,??????????????????,???????????????:getColumnCount():??????ResultSet????????????????????????.getColumnName(int column):????????????????????????????????????.?????????????????????????????????????????????????????????????????????DBUtils???~???????????????????????????:
??????1.??????MyQueryRunner???executeUpdate??????.
???????????????????????????????????????,??????????????????dataSource??????Connection,?????????????????????????????????jdbc??????.??????????????????,????????????????????????????????????PreparedStatement???.????????????:
public int update(String sql, Object... params) { Connection connection=null; PreparedStatement preparedStatement=null; try { connection=dataSource.getConnection(); preparedStatement=connection.prepareStatement(sql); for(int i=0;i<params.length;i++) { preparedStatement.setObject((i+1), params[i]);//????????????. } int x=preparedStatement.executeUpdate();//??????????????????. return x; } catch (SQLException e) { throw new RuntimeException(e); } finally { if(preparedStatement!=null) { try { preparedStatement.close(); } catch (SQLException e) { e.printStackTrace(); } } if(connection!=null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
??????2.??????MyQueryRunner???executeQuery??????.
????????????????????????????????????,?????????????????????????????????????????????ResultSetHandler?????????????????????.????????????:
//?????????????????????. //??????????????????BeanHandler BeanListHandler MapListHandler public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params) { Connection connection=null; PreparedStatement preparedStatement=null; ResultSet rs=null; try { connection=dataSource.getConnection(); preparedStatement=connection.prepareStatement(sql); if(params!=null) { for(int i=0;i<params.length;i++) { preparedStatement.setObject((i+1), params[i]); } } rs=preparedStatement.executeQuery(); return rsh.handle(rs);//????????????????????? } catch (SQLException e) { throw new RuntimeException(e); } finally { if(rs!=null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(preparedStatement!=null) { try { preparedStatement.close(); } catch (SQLException e) { e.printStackTrace(); } } if(connection!=null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
??????3.3?????????????????????.
?????????MyQueryRunner?????????????????????????????????,???????????????????????????,????????????????????????BeanHandler,BeanListHandler,MapListHandler???????????????,??????????????????????????????(?????????????????????????????????= =)?????????.????????????BeanHandler???????????????,Handler?????????????????????????????????,???????????????????????????????????????,???????????????????????????.
??????BeanHandler????????????????????????,??????T t????????????????????????JavaBean,??????????????????????????????????????????,??????Class type??????,????????????Class,??????JavaBean???????????????t,??????Field?????????t?????????????????????.?????????????????????,?????????getColumnCount???????????????????????????,???????????????,??????getColumnName(int columnCount)??????????????????,???Class?????????getField????????????Field??????(??????JavaBean???????????????????????????????????????!???????????????),?????????Field?????????set????????????.??????Field?????????????????????????????????????????????(JavaBean?????????.)?????????????????????setAccessable???????????????.?????????????????????:
public class MyBeanHandler<T> implements ResultSetHandler{ private Class<T> type; T t;//???????????????JavaBean public MyBeanHandler(Class<T> type) { this.type=type; } @Override public Object handle(ResultSet rs) throws SQLException { try { t=type.newInstance(); ResultSetMetaData metaData = rs.getMetaData(); int count=metaData.getColumnCount();//??????ResultSet?????????????????? rs.next();//???????????? //??????????????????????????????,??????????????????????????? for(int i=1;i<=count;i++) { String name=metaData.getColumnName(i); Object obj=rs.getObject(i); Field field = type.getDeclaredField(name); field.setAccessible(true); field.set(t, obj);//??????????????????JavaBean } } catch (Exception e) { e.printStackTrace(); } return t; } }
??????MyBeanListHandler???????????????,?????????BeanHandler??????.???????????????????????????????????????next???????????????????????????,??????????????????????????????????????????,?????????????????????List????????????????????????????????????????????????ArrayList.??????????????????:
public class MyBeanListHandler<T> implements ResultSetHandler<List<T>>{ private Class<T> type; List<T> list=new ArrayList<T>();//?????????????????????.????????????ArrayList public MyBeanListHandler(Class<T> type) { this.type = type; } @Override public List<T> handle(ResultSet rs) throws SQLException { try { ResultSetMetaData metaData = rs.getMetaData(); int count=metaData.getColumnCount(); while(rs.next()) { T t=type.newInstance(); for(int i=1;i<=count;i++) { String name=metaData.getColumnName(i);//?????????????????????.???????????????????????????.??????name,age... Object obj=rs.getObject(i);//??????????????? Field field = type.getDeclaredField(name);//??????field?????? field.setAccessible(true); field.set(t, obj);//????????? } list.add(t); } return list; } catch (Exception e) { throw new RuntimeException(e); } } }
??????MapList????????????????????????,???????????????????????????????????????????????????????????????,???????????????,????????????:
public class MyMapListHandler implements ResultSetHandler<List<Map<String, Object>>> { private List<Map<String,Object>> data=new ArrayList<>(); @Override public List<Map<String, Object>> handle(ResultSet rs) throws SQLException { ResultSetMetaData metaData = rs.getMetaData(); int count=metaData.getColumnCount(); while(rs.next()) { Map<String,Object> map=new HashMap<>(); for(int i=1;i<=count;i++) { Object value=rs.getObject(i); String name=metaData.getColumnName(i); map.put(name, value); } data.add(map); } return data; } }
以上是关于???????????????ResultSetMetaData??????DBUtils???????????????的主要内容,如果未能解决你的问题,请参考以下文章