天天看點

JDBC 中繼資料 (DatabaseMetaData,ResultSetMetaData )

Java 通過JDBC獲得連接配接以後,得到一個Connection 對象,可以從這個對象獲得有關資料庫管理系統的各種資訊,包括資料庫中的各個表,表中的各個列,資料類型,觸發器,存儲過程等各方面的資訊。根據這些資訊,JDBC可以通路一個實作事先并不了解的資料庫。

擷取這些資訊的方法都是在DatabaseMetaData類的對象上實作的,而DataBaseMetaData對象是在Connection對象上獲得的。

DatabaseMetaData 類中提供了許多方法用于獲得資料源的各種資訊,通過這些方法可以非常詳細的了解資料庫的資訊:

  • getURL():傳回一個String類對象,代表資料庫的URL。
  • getUserName():傳回連接配接目前資料庫管理系統的使用者名。
  • isReadOnly():傳回一個boolean值,訓示資料庫是否隻允許讀操作。
  • getDatabaseProductName():傳回資料庫的産品名稱。
  • getDatabaseProductVersion():傳回資料庫的版本号。
  • getDriverName():傳回驅動驅動程式的名稱。
  • getDriverVersion():傳回驅動程式的版本号。
1     /**
 2      *  查詢特定資料庫中的所有表
 3      * @param connection 資料庫連接配接對象
 4      * @return 資料庫表的list
 5      */
 6     public static List<String> getTables(Connection connection){
 7         try {
 8             List<String> tableList = new ArrayList<>();
 9             DatabaseMetaData metaData = connection.getMetaData();
10             ResultSet resultSet = metaData.getTables(null, null, null, new String[]{"TABLE"});
11             while (resultSet.next()){
12                 tableList.add(resultSet.getString(3));
13             }
14             return tableList;
15         } catch (SQLException e) {
16             e.printStackTrace();
17         }
18         return null;
19     }      

可用于擷取關于 ResultSet 對象中列的類型和屬性資訊的對象:

  • getColumnName(int column):擷取指定列的名稱
  • getColumnCount():傳回目前 ResultSet 對象中的列數。
  • getColumnTypeName(int column):檢索指定列的資料庫特定的類型名稱。
  • getColumnDisplaySize(int column):訓示指定列的最大标準寬度,以字元為機關。
  • isNullable(int column):訓示指定列中的值是否可以為 null。
  • isAutoIncrement(int column):訓示是否自動為指定列進行編号,這樣這些列仍然是隻讀的。