2.5.2 结果集元数据
在前面讲过,execute、executeQuery和executeUpdate方法都可以返回ResultSet对象。通过ResultSet接口的next方法可以对数据进行扫描,但要获得ResultSet对象的元数据(列数、列名、字段类型等),就需要使用ResultSet接口的getMetaData方法,getMetaData方法的定义如下:
ResultSetMetaData getMetaData() throws SQLException;
可以通过ResultSetMetaData接口的getXxx和isXxx方法获得ResultSet对象的元数据,下面是部分getXxx和isXxx方法的定义代码:
int getColumnCount() ;
String getColumnName(int column);
String getColumnTypeName(int column);
String getColumnClassName(int column);
int getColumnDisplaySize(int column);
boolean isAutoIncrement(int column);
下面的例子演示了如何使用这些getXxx和isXxx方法来获得结果集元数据,代码如下:
public class RSMetaData
{
public static void main(String[] args) throws Exception
{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost/mydb?characterEncoding=UTF8",
"root", "1234");
Statement stmt = conn.createStatement();
stmt.setMaxRows(1); // 只返回一条数据
ResultSet rs = stmt.executeQuery("SELECT * FROM t_books");
// 获得返回结果集的元数据
ResultSetMetaData rsmd = rs.getMetaData();
// 输出结果集的元数据
for(int i = 1; i <= rsmd.getColumnCount(); i++)
{
System.out.println("列名:" + rsmd.getColumnName(i));
System.out.println("SQL类型:" + rsmd.getColumnTypeName(i));
System.out.println("对应的Java类型:" + rsmd.getColumnClassName(i));
System.out.println("列尺寸:" + rsmd.getColumnDisplaySize(i));
System.out.println("自增字段:" + rsmd.isAutoIncrement(i));
System.out.println("----------------------------");
}
conn.close();
}
}
在运行上面的程序后,将会输出如下的信息:
列名:id
SQL类型:INTEGER UNSIGNED
对应的Java类型:java.lang.Long
列尺寸:10
自增字段:true
----------------------------
列名:name
SQL类型:VARCHAR
对应的Java类型:java.lang.String
列尺寸:50
自增字段:false
----------------------------
列名:isbn
SQL类型:VARCHAR
对应的Java类型:java.lang.String
列尺寸:20
自增字段:false
----------------------------
列名:author
SQL类型:VARCHAR
对应的Java类型:java.lang.String
列尺寸:20
自增字段:false
----------------------------
列名:price
SQL类型:INTEGER UNSIGNED
对应的Java类型:java.lang.Long
列尺寸:10
自增字段:false
----------------------------