功能:

  1. 包含了查询后的结果集的相关信息

 

说明:

  1. 本文为了代码结构清晰 采用的是try-with-resource结构,请在java7下使用(或者自己改成传统模式)
  2. 具体使用请看例子,更多内容请看例子后的扩展阅读
  3. 本例演示了通用型结果集遍历

 

部分API:

返回类型方法名称说明
intgetColumnCount()结果集对象存在几个字段
(用于批量执行)
StringgetColumnLabel(int column)获得指定列的别名
StringgetColumnName(int column)获得指定列的字段名
StringgetColumnTypeName(int column)获得指定列的类型名称
StringgetTableName(int column)获得指定列数据表表名

 

程序演示: 放大

  1. package com.cxy.jdbc;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.ResultSet;  
  7. import java.sql.ResultSetMetaData;  
  8. import java.sql.SQLException;  
  9. import java.util.ArrayList;  
  10. import java.util.Arrays;  
  11. import java.util.HashMap;  
  12. import java.util.List;  
  13. import java.util.Map;  
  14.   
  15. /** 
  16.  * @author cxy @ www.cxyapi.com 
  17.  */  
  18. public class ResultSetMetaDataTest  
  19. {  
  20.     public static void main(String[] args) throws Exception  
  21.     {  
  22.         Class.forName("com.mysql.jdbc.Driver");  
  23.         try  
  24.         (  
  25.             Connection con=DriverManager.getConnection("jdbc:mysql://localhost/dbtest""root""root");  
  26.             PreparedStatement pstmt=con.prepareStatement("select id_ as 主键,name_ as 姓名,sex as 性别 from t_student",   
  27.                          ResultSet.TYPE_SCROLL_SENSITIVE,  
  28.                          ResultSet.CONCUR_UPDATABLE);  
  29.             ResultSet rs=pstmt.executeQuery();  
  30.         )  
  31.         {  
  32.             ResultSetMetaData rsm=rs.getMetaData();  
  33.             System.out.println("t_student表有几个字段?"+rsm.getColumnCount());  
  34.             System.out.println("第一个字段所在表?"+rsm.getTableName(1));  
  35.             System.out.println("========================");  
  36.               
  37.             //遍历一个不知道结构的表  
  38.             System.out.println("通用型遍历结果集:");  
  39.             System.out.println("1.获得所有的列名");  
  40.             int colNum=rsm.getColumnCount();  
  41.             String[] colName=new String[colNum]; //字段名  
  42.             String[] colLabel=new String[colNum]; //别名  
  43.             for(int i=1;i<=colNum;i++)  
  44.             {  
  45.                 colName[i-1]=rsm.getColumnName(i);  
  46.                 colLabel[i-1]=rsm.getColumnLabel(i);  
  47.             }  
  48.             System.out.println(Arrays.asList(colName));  
  49.             System.out.println(Arrays.asList(colLabel));  
  50.             System.out.println("------------------------");  
  51.             System.out.println("2.遍历并封装");  
  52.             //把结果集封装成List<Map<String,String>>  
  53.             List<Map<String,String>> dbData=new ArrayList<>();  
  54.             while(rs.next())  
  55.             {  
  56.                 Map<String,String> one = new HashMap<String, String>();  
  57.                 for(int i=1;i<=colNum;i++)  
  58.                 {  
  59.                     one.put(colLabel[i-1], rs.getString(i));  
  60.                 }  
  61.                 dbData.add(one);  
  62.             }  
  63.             //System.out.println(dbData);  
  64.             for(Map<String,String> one : dbData)  
  65.             {  
  66.                 System.out.println(one);  
  67.             }  
  68.         }catch(SQLException e)  
  69.         {  
  70.             System.out.println("数据库操作出现异常");  
  71.         }  
  72.     }  
  73.   
  74. }  

 

运行结果截图: