2.5.2 结果集元数据

优质
小牛编辑
124浏览
2023-12-01

在前面讲过,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

----------------------------