JDBC課程5--利用反射及JDBC元數據(ResultSetMetaData)編寫通用的查詢方法
阿新 • • 發佈:2018-11-21
alt shm height *** 輸出 一個 查找 tools finall
/**-利用反射及JDBC元數據編寫通用的查詢方法
* 1.先利用SQl語句進行查詢,得到結果集-->
* 2.查找到結果集的別名:id-->
* 3.利用反射創建實體類的對象,創建author對象-->
* 4.獲取結果集的列的別名: id,nation,name
* 5.再獲得結果集的每一列的值,
* 結合2得到一個map鍵值對: 鍵: 列的別名,值: 列的值: {id=1,nation=中國,name=莫言}
* 6.再利用反射為2的對應的屬性賦值,屬性為Map 的鍵,值為Map 的值!
* 7.針對每輪查詢,遍歷map結果集,整合進對象,進行輸出或者其他操作;*/
代碼:
/**ResultSetMetaData 簡介 * 定義: 是描述ResultSet 的元數據對象,即從中可以或許到結果集中有多少列,列名是什麽... * 用法: * 得到ResultSetMetaData 對象: 調用ResultSet的 getMetaData()方法即可! * ResultSetMetaData的常用方法: * >int getColumnCount() : SQL語句中包含的列的總個數 * >String getColumnLabel(int column) : 獲取指定的列的別名,其中索引從1開始; **/ public class testResultSetMetaData { @Test public void testResultSetMetaData(){ Connection connection=null; PreparedStatement preparedStatement=null; ResultSet resultSet=null; try { String sql="select id,author_name name,nation "+ "from author where id <= ?"; connection= JDBCTools.getConnection(); preparedStatement=connection.prepareStatement(sql); preparedStatement.setInt(1,5 ); resultSet=preparedStatement.executeQuery(); Map<String,Object> values=new HashMap<String,Object>(); //1. 得到ResultSetMetaData 對象 while (resultSet.next()) { //2.打印每一列的列名 ResultSetMetaData rsmd=resultSet.getMetaData(); for (int i = 0; i < rsmd.getColumnCount(); i++) { String columnLabel = rsmd.getColumnLabel(i + 1); //獲取列表標簽名稱 // System.out.print("\n" + columnLabel + "\t"); Object columnValue=resultSet.getObject(columnLabel); //根據名稱,獲取列值,存入HashMap values.put(columnLabel,columnValue ); } //System.out.println(values); //獲取一組結果 ,重復的鍵值對會被後面的覆蓋掉 Class clazz=author.class; Object object=clazz.newInstance(); for(Map.Entry<String,Object> entry: values.entrySet()){ String fieldName = entry.getKey(); Object fieldValue = entry.getValue(); System.out.print("\t"+fieldName+"-->"+fieldValue); } System.out.print("\n******************"); } } catch (Exception e) { e.printStackTrace(); } finally { JDBCTools.release(resultSet,preparedStatement ,connection); } } }
結果:
com.mysql.jdbc.JDBC4Connection@19e1023e
nation-->中國 name-->莫言 id-->1
****************** nation-->中國 name-->村上春樹 id-->2
****************** nation-->中國 name-->山楓葉紛飛 id-->3
****************** nation-->北京 name-->劉慈欣 id-->4
****************** nation-->元星 name-->瑞 id-->5
******************
JDBC課程5--利用反射及JDBC元數據(ResultSetMetaData)編寫通用的查詢方法