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):指示是否自動為指定列進行編號,這樣這些列仍然是只讀的。