Java JDBC - ResultSetMetaData trong java

ResultSetMetaData trong java

Giao diện ResultSetMetaData trong java được sử dụng để lấy ra các metadata từ đối tượng ResultSet.

Siêu dữ liệu (metadata) là các thông tin của dữ liệu. Ví dụ, một metadata của file là ngày tháng tạo file, dung lượng của file, ... Metadata của một bảng trong CSDL là các thông tin về bảng như tên bảng, tên cột, kiểu giá trị của cột, ...

Làm thế nào để có được đối tượng ResultSetMetaData

Phương thức getMetaData() của giao diện ResultSet trả về đối tượng ResultSetMetaData. Cú pháp:

ResultSetMetaData getMetaData() throws SQLException;

Các phương thức phổ biến của giao diện ResultSetMetaData

Dưới đây là các phương thức phổ biến của giao diện ResultSetMetaData trong java:

Method Description
public int getColumnCount()throws SQLException nó trả về tổng số các cột trong đối tượng ResultSet.
public String getColumnName(int index)throws SQLException nó trả về tên cột của chỉ số cột được chỉ định.
public String getColumnTypeName(int index)throws SQLException nó trả về tên cột cho chỉ số đã chỉ định.
public String getTableName(int index)throws SQLException nó trả về tên bảng cho chỉ số cột được chỉ định.

Ví dụ về ResultSetMetaData interface

Tạo bảng ‘student’ trong cơ sở dữ liệu có tên ‘testdb’ trong MySQL với câu lệnh như sau:

CREATE TABLE student (
   id   INT              NOT NULL,
   name VARCHAR (32)     NOT NULL,
   address  VARCHAR (32) NOT NULL,
   PRIMARY KEY (id)
);

Chương trình sau lấy ra một vài metadata của bảng 'student':

package vn.viettuts.jdbc;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
 
public class ResultSetMetaDataExample {
    private static String DB_URL = "jdbc:mysql://localhost:3306/testdb";
    private static String USER_NAME = "root";
    private static String PASSWORD = "1234567890";
     
    public static void main(String[] args) {
        String selectAll = "SELECT * FROM student";
        try {
            // connect to database
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection(DB_URL, 
                    USER_NAME, PASSWORD);
             
            // crate statement
            PreparedStatement stmt = conn.prepareStatement(selectAll);
            // get data from table 'student'
            ResultSet rs = stmt.executeQuery();
            // get metadata from rs
            ResultSetMetaData rsmd = rs.getMetaData();
             
            // show metadata
            System.out.println("Tong so column cua bang 'student': "
                    + rsmd.getColumnCount());
            System.out.println("Ten column thu 2: "
                    + rsmd.getColumnName(2));
            System.out.println("Column type cua column thu 2: "
                    + rsmd.getColumnTypeName(2));
             
            stmt.close();
            conn.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Kết quả:

Tong so column cua bang 'student': 3
Ten column thu 2: name
Column type cua column thu 2: VARCHAR