1、JDBC將返回結果集封裝成對象demo
class JdbcDemo { /** * 獲取數據庫列名 * @param rs * @return */ private static String[] getColNames(ResultSet rs) throws SQLException { ResultSetMetaData rsmd = rs.getMetaData(); //獲取查詢的列數 int count = rsmd.getColumnCount(); String[] colNames = new String[count]; for(int i = 1; i <= count; i ++) { //獲取列名 colNames[i - 1] = rsmd.getColumnLabel(i); } return colNames; } /** * 將JDBC查詢返回的結果集,利用反射封裝成對象 * @param sql * @param clazz * @return */ private static Object getObject(String sql, Class clazz) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); String[] colNames = getColNames(rs); Object object = null; Method[] ms = clazz.getMethods(); if(rs.next()) { object = clazz.newInstance(); for(int i = 0; i < colNames.length; i ++) { String colName = colNames[i]; String methodName = "set" + colName; //穩妥一點。在對象查詢下是否有此方法在調用方法 for(Method md : ms) { if(methodName.equals(md.getName())) { md.invoke(object, rs.getObject(colName)); break; } } } } return object; } finally { //釋放連接 JdbcUtils.free(rs, ps, conn); } } }