Java DatabaseMetaData getColumns() 方法及示例
此方法檢索表中列的描述。它接受 4 個引數:
catalog - 一個字串引數,表示包含需要檢索其描述的列的表所在的目錄(通常是資料庫)的名稱(或名稱模式)。傳遞 "" 以獲取沒有目錄的表的列的描述,如果不想使用目錄並縮小搜尋範圍,則傳遞 null。
schemaPattern - 一個字串引數,表示表的模式的名稱(或名稱模式),如果表沒有模式,則傳遞 "",如果不想使用模式,則傳遞 null。
tableNamePattern - 一個字串引數,表示表的名稱(或名稱模式)。
columnNamePattern - 一個字串引數,表示列的名稱(或名稱模式)。
此方法返回一個 ResultSet 物件,該物件描述指定的列。此物件包含以下詳細資訊的值(作為列名):
列名 | 資料型別 | 描述 |
---|---|---|
TABLE_CAT | 字串 | 表的目錄。 |
TABLE_SCHEM | 字串 | 模式的目錄。 |
TABLE_NAME | 字串 | 表的名稱。 |
COLUMN_NAME | 字串 | 列的名稱。 |
DATA_TYPE | 整數 | 列的資料型別,以整數表示。 |
TYPE_NAME | 字串 | 列的資料型別的名稱。 |
COLUMN_SIZE | 整數 | 列的大小。 |
REMARKS | 字串 | 關於列的註釋。 |
COLUMN_DEF | 字串 | 列的預設值。 |
ORDINAL_POSITION | 整數 | 列在表中的索引。 |
IS_AUTOINCREMENT | 字串 | 如果列是自動遞增的,則返回 yes;如果列不是自動遞增的,則返回 false;如果無法確定,則返回空字串 (" ")。 |
IS_GENERATEDCOLUMN | 字串 | 如果列是生成的列,則返回 yes;如果列不是生成的列,則返回 false;如果無法確定,則返回空字串 (" ")。 |
要獲取資料庫中所需列的描述:
確保您的資料庫正在執行。
使用 DriverManager 類的 registerDriver() 方法註冊驅動程式。傳遞與底層資料庫對應的驅動程式類的物件。
使用 DriverManager 類的 getConnection() 方法獲取連線物件。將資料庫的 URL 以及資料庫中使用者的使用者名稱和密碼作為字串變數傳遞。
使用 Connection 介面的 getMetaData() 方法獲取當前連線的 DatabaseMetaData 物件。
最後,透過呼叫 DatabaseMetaData 介面的 getColumns() 方法,獲取包含所需列描述的 ResultSet 物件。
示例
讓我們建立一個名為 example_database 的資料庫,並在其中使用 CREATE 語句建立一個名為 sample_table 的表,如下所示:
Statement stmt = con.createStatement(); stmt.execute("CREATE DATABASE example_database"); stmt.execute("CREATE TABLE example_database.sample_table(Name VARCHAR(255), age INT, Location VARCHAR(255));");
現在,我們將向此表中插入兩條記錄:
stmt.execute("INSERT INTO example_database.sample_table values('Kasyap', 29, 'Vishakhapatnam')"); stmt.execute("INSERT INTO example_database.sample_table values('Krishna', 30, 'Hyderabad')");
下面的 JDBC 程式建立與 MySQL 資料庫的連線,並檢索指定列的描述。
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; public class DatabaseMetaData_getColumns { public static void main(String args[]) throws SQLException { //Registering the Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Getting the connection String url = "jdbc:mysql:///example_database"; Connection con = DriverManager.getConnection(url, "root", "password"); System.out.println("Connection established......"); //Retrieving the meta data object DatabaseMetaData metaData = con.getMetaData(); //Retrieving the columns in the database ResultSet columns = metaData.getColumns(null, null, "sample_table", null); //Printing the column name and size while (columns.next()){ System.out.print("Column name and size: "+columns.getString("COLUMN_NAME")); System.out.print("("+columns.getInt("COLUMN_SIZE")+")"); System.out.println(" "); System.out.println("Ordinal position: "+columns.getInt("ORDINAL_POSITION")); System.out.println("Catalog: "+columns.getString("TABLE_CAT")); System.out.println("Data type (integer value): "+columns.getInt("DATA_TYPE")); System.out.println("Data type name: "+columns.getString("TYPE_NAME")); System.out.println(" "); } } }
輸出
Connection established...... Column name and size: Name(255) Ordinal position: 1 Catalog: example_database Data type (integer value): 12 Data type name: VARCHAR Column name and size: age(10) Ordinal position: 2 Catalog: example_database Data type (integer value): 4 Data type name: INT Column name and size: Location(255) Ordinal position: 3 Catalog: example_database Data type (integer value): 12 Data type name: VARCHAR