通過(guò)java.sql.DatabaseMetaData 接口,我們能獲取到數(shù)據(jù)庫(kù)的列表、列等信息。
DatabaseMetaData 接口包含了許多方法大莫,這里值介紹常用的蛉腌。
獲取 DatabaseMetaData 實(shí)例對(duì)象
DatabaseMetaData databaseMetaData = connection.getMetaData();
獲取數(shù)據(jù)庫(kù)名和版本
int majorVersion = databaseMetaData.getDatabaseMajorVersion();
int minorVersion = databaseMetaData.getDatabaseMinorVersion();
String productName = databaseMetaData.getDatabaseProductName();
String productVersion = databaseMetaData.getDatabaseProductVersion();
數(shù)據(jù)庫(kù)屬性信息:5 6 MySQL 5.6.24
獲取數(shù)據(jù)庫(kù)驅(qū)動(dòng)版本
int driverMajorVersion = databaseMetaData.getDriverMajorVersion();
int driverMinorVersion = databaseMetaData.getDriverMinorVersion();
獲取數(shù)據(jù)庫(kù)列表
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;
我在這里給四個(gè)參數(shù)都賦值null官份,則它會(huì)把所有數(shù)據(jù)庫(kù)中的表信息 返回。
此ResultSet包含10列烙丛,每列包含有關(guān)給定表的信息舅巷。 索引3指的是表名稱(chēng)。
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的列包含列名稱(chēng)钠右,索引為5的列包含列類(lèi)型。 列類(lèi)型是一個(gè)與java.sql.Types中的類(lèi)型常量匹配的整數(shù)忘蟹。
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);
}
調(diào)用getPrimaryKeys()方法飒房,向其傳遞3個(gè)參數(shù)。 在這個(gè)例子中媚值,只有tableName是非空的狠毯。
getPrimaryKeys()方法返回的ResultSet包含組成給定表主鍵的列表。 索引4指的是的列名稱(chēng)褥芒。
主鍵可以由多個(gè)列組成嚼松。 這樣的密鑰被稱(chēng)為復(fù)合密鑰。 如果表包含復(fù)合鍵锰扶,則ResultSet將包含多行献酗。 復(fù)合鍵中的每一列都有一行。
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("數(shù)據(jù)庫(kù)屬性信息:"+majorVersion+" "+minorVersion+" "+productName+" "+productVersion);
int driverMajorVersion = databaseMetaData.getDriverMajorVersion();
int driverMinorVersion = databaseMetaData.getDriverMinorVersion();
System.out.println("驅(qū)動(dòng)信息:"+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();
}
}
}