JDBC ResultSetMetaData接口

时间:2020-01-09 10:35:21  来源:igfitidea点击:

使用java.sql.ResultSetMetaData接口可以获取有关ResultSet对象的元数据。当我们从数据库中检索数据时,每个ResultSet对象都将返回一个ResultSet对象,并且会有一个关联的ResultSetMetaData对象,其中包含有关返回的ResultSet的信息,例如表名,列数,列的数据类型。

如何获取ResultSetMetaData对象

我们可以通过调用ResultSet的getMetaData()方法来获取ResultSetMetaData实例。

ResultSet rs = stmt.executeQuery("从TABLE_NAME中选择a,b,c");
ResultSetMetaData rsmd = rs.getMetaData();

Java ResultSetMetaData中的方法

ResultSetMetaData的一些重要方法如下:

  • getColumnCount()–返回此ResultSet对象中的列数。
  • getColumnName(int column)–获取指定列的名称。
  • getColumnType(int column)–检索指定列的SQL类型。
  • getSchemaName(int column)–获取指定列的表的架构。
  • getTableName(int column)–获取指定列的表名。
  • isAutoIncrement(int列)–指示指定的列是否自动编号。

ResultSetMetaData Java示例

使用的数据库是MySql,模式是theitroad,使用的表是EMPLOYEE,其列为id,FIRST_NAME,LAST_NAME和DEPARTMENT,请注意,id是自动递增的。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class RSMDDemo {
  public static void main(String[] args) {
    Connection connection = null;
    try {
      // Load driver
      Class.forName("com.mysql.cj.jdbc.Driver");
      // connection object
      connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/theitroad", 
                   "root", "admin");
      // create Statement object   
      Statement statement = connection.createStatement();  
      ResultSet rs = statement.executeQuery("Select * from Employee");
      System.out.println("***ResultSet Metadata information***");
      ResultSetMetaData rsmd = rs.getMetaData();
      int columnCount = rsmd.getColumnCount();	      
      System.out.println("Number of columns in each row- " + columnCount);
      System.out.println("ID column auto incremented- " + rsmd.isAutoIncrement(1));
      System.out.println("Table Name- " + rsmd.getTableName(2));
      for(int i = 1; i <= columnCount; i++) {
    	  System.out.println("Column " + rsmd.getColumnName(i) + " is of type " + rsmd.getColumnTypeName(i));
      }
  //	      // Iterate through ResultSet
  //	      while(rs.next()){
  //	        System.out.println("id: " + rs.getInt("id") + 
  //	           " First Name: " + rs.getString("FIRST_NAME") + 
  //	           " Last Name: " + rs.getString("LAST_NAME")+ 
  //	           " Dept: " + rs.getString("DEPARTMENT")); 
  //	      } 
    }catch(ClassNotFoundException | SQLException e) {
      e.printStackTrace();
    }finally{
      if(connection != null){
        //close connection 
        try {
          connection.close();
        } catch (SQLException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
    }
  }
}

输出:

***ResultSet Metadata information***
Number of columns in each row- 4
ID column auto incremented- true
Table Name- employee
Column id is of type INT
Column first_name is of type VARCHAR
Column last_name is of type VARCHAR
Column department is of type VARCHAR