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

更新於:2019-07-30

3K+ 瀏覽量

開啟你的職業生涯

完成課程,獲得認證

開始學習
廣告