1. 程式人生 > >JDBC課程5--利用反射及JDBC元數據(ResultSetMetaData)編寫通用的查詢方法

JDBC課程5--利用反射及JDBC元數據(ResultSetMetaData)編寫通用的查詢方法

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)編寫通用的查詢方法