通過java.sql.DatabaseMetaData 接口,我們能獲取到數據庫的列表、列等信息。
DatabaseMetaData 接口包含了許多方法,這里值介紹常用的。
###獲取 DatabaseMetaData 實例對象
DatabaseMetaData databaseMetaData = connection.getMetaData();
復制代碼
###獲取數據庫名和版本
int majorVersion = databaseMetaData.getDatabaseMajorVersion();
int minorVersion = databaseMetaData.getDatabaseMinorVersion();String productName = databaseMetaData.getDatabaseProductName();
String productVersion = databaseMetaData.getDatabaseProductVersion();
復制代碼
數據庫屬性信息:5 6 MySQL 5.6.24
復制代碼
###獲取數據庫驅動版本
int driverMajorVersion = databaseMetaData.getDriverMajorVersion();
int driverMinorVersion = databaseMetaData.getDriverMinorVersion();
復制代碼
###獲取數據庫列表
String catalog = null;
String schemaPattern = null;
String tableNamePattern = null;
String[] types = null;ResultSet result = databaseMetaData.getTables(catalog, schemaPattern, tableNamePattern, types );while(result.next()) {String tableName = result.getString(3);
}
復制代碼
getTables()方法源碼:
ResultSet getTables(String catalog, String schemaPattern,String tableNamePattern, String types[]) throws SQLException;
復制代碼
我在這里給四個參數都賦值null,則它會把所有數據庫中的表信息 返回。
此ResultSet包含10列,每列包含有關給定表的信息。 索引3指的是表名稱。
user
復制代碼
###在表中列出列
String catalog = null;
String schemaPattern = null;
String tableNamePattern = "user";
String columnNamePattern = null;ResultSet result = databaseMetaData.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);while(result.next()){String columnName = result.getString(4);int columnType = result.getInt(5);
}
復制代碼
getColumns()方法返回的ResultSet包含給定表的列的列表。 索引為4的列包含列名稱,索引為5的列包含列類型。 列類型是一個與java.sql.Types中的類型常量匹配的整數。
id 4
username 12
birthday 91
sex 1
address 12
復制代碼
###表的主鍵
String catalog = null;
String schema = null;
String tableName = "user";ResultSet result = databaseMetaData.getPrimaryKeys(catalog, schema, tableName);while(result.next()){String columnName = result.getString(4);
}
復制代碼
調用getPrimaryKeys()方法,向其傳遞3個參數。 在這個例子中,只有tableName是非空的。
getPrimaryKeys()方法返回的ResultSet包含組成給定表主鍵的列表。 索引4指的是的列名稱。
主鍵可以由多個列組成。 這樣的密鑰被稱為復合密鑰。 如果表包含復合鍵,則ResultSet將包含多行。 復合鍵中的每一列都有一行。
id
復制代碼
###全部代碼
package com.jdbc;import java.sql.*;/*** Created by Fant.J.* 2018/3/5 21:38*/
public class DatabaseMetaDataTest {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/user";String user = "root";String password = "root";Connection connection =null;try {Class.forName("com.mysql.jdbc.Driver");connection = DriverManager.getConnection(url,user,password);DatabaseMetaData databaseMetaData = connection.getMetaData();int majorVersion = databaseMetaData.getDatabaseMajorVersion();int minorVersion = databaseMetaData.getDatabaseMinorVersion();String productName = databaseMetaData.getDatabaseProductName();String productVersion = databaseMetaData.getDatabaseProductVersion();System.out.println("數據庫屬性信息:"+majorVersion+" "+minorVersion+" "+productName+" "+productVersion);int driverMajorVersion = databaseMetaData.getDriverMajorVersion();int driverMinorVersion = databaseMetaData.getDriverMinorVersion();System.out.println("驅動信息:"+driverMajorVersion+" "+driverMinorVersion);/* String catalog = null;String schemaPattern = null;String tableNamePattern = null;String[] types = null;ResultSet result = databaseMetaData.getTables(catalog, schemaPattern, tableNamePattern, types );while(result.next()) {String tableName = result.getString(3);System.out.println(tableName);}*//* String catalog = null;String schemaPattern = null;String tableNamePattern = "user";String columnNamePattern = null;ResultSet result = databaseMetaData.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern);while(result.next()){String columnName = result.getString(4);int columnType = result.getInt(5);System.out.println(columnName+" "+columnType+" ");}*/String catalog = null;String schema = null;String tableName = "user";ResultSet result = databaseMetaData.getPrimaryKeys(catalog, schema, tableName);while(result.next()){String columnName = result.getString(4);System.out.println(columnName);}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}
}復制代碼