mysql+元数据+java_Java获取mysql数据库元数据

修改后的版本:

package com.genratesql.util;

import java.sql.Connection;

import java.sql.DatabaseMetaData;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.HashMap;

import java.util.Map;

import com.genratesql.pojo.Field;

public class DatabaseMetaUtil {

private final static String DATABASE_NAME = "generatesql";

private DatabaseMetaData dbMetaData = null;

private Connection con = null;

public DatabaseMetaUtil() {

this.getDatabaseMetaData();

}

private void getDatabaseMetaData() {

try {

if (dbMetaData == null) {

Class.forName("com.mysql.jdbc.Driver");

String url = "jdbc:mysql://localhost:3306/" + DATABASE_NAME;

String user = "root";

String password = "root";

con = DriverManager.getConnection(url, user, password);

dbMetaData = con.getMetaData();

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 获得数据库的一些相关信息

*/

public void getDataBaseInformations() {

try {

System.out.println("数据库已知的用户: " + dbMetaData.getUserName());

System.out.println("数据库的系统函数的逗号分隔列表: " + dbMetaData.getSystemFunctions());

System.out.println("数据库的时间和日期函数的逗号分隔列表: " + dbMetaData.getTimeDateFunctions());

System.out.println("数据库的字符串函数的逗号分隔列表: " + dbMetaData.getStringFunctions());

System.out.println("数据库供应商用于 'schema' 的首选术语: " + dbMetaData.getSchemaTerm());

System.out.println("数据库URL: " + dbMetaData.getURL());

System.out.println("是否允许只读:" + dbMetaData.isReadOnly());

System.out.println("数据库的产品名称:" + dbMetaData.getDatabaseProductName());

System.out.println("数据库的版本:" + dbMetaData.getDatabaseProductVersion());

System.out.println("驱动程序的名称:" + dbMetaData.getDriverName());

System.out.println("驱动程序的版本:" + dbMetaData.getDriverVersion());

System.out.println();

System.out.println("数据库中使用的表类型");

ResultSet rs = dbMetaData.getTableTypes();

while (rs.next()) {

System.out.println(rs.getString(1));

}

rs.close();

System.out.println();

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 获得该用户下面的所有表

*/

public void getAllTableList(String schemaName) {

try {

// table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE",

// "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".

String[] types = { "TABLE" };

ResultSet rs = dbMetaData.getTables(null, schemaName, "%", types);

while (rs.next()) {

String tableName = rs.getString("TABLE_NAME"); // 表名

String tableType = rs.getString("TABLE_TYPE"); // 表类型

String remarks = rs.getString("REMARKS"); // 表备注

System.out.println(tableName + "-" + tableType + "-" + remarks);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 获得该用户下面的所有视图

*/

public void getAllViewList(String schemaName) {

try {

String[] types = { "VIEW" };

ResultSet rs = dbMetaData.getTables(null, schemaName, "%", types);

while (rs.next()) {

String viewName = rs.getString("TABLE_NAME"); // 视图名

String viewType = rs.getString("TABLE_TYPE"); // 视图类型

String remarks = rs.getString("REMARKS"); // 视图备注

System.out.println(viewName + "-" + viewType + "-" + remarks);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 获得数据库中所有方案名称

*/

public void getAllSchemas() {

try {

ResultSet rs = dbMetaData.getSchemas();

while (rs.next()) {

String tableSchem = rs.getString("TABLE_SCHEM");

System.out.println(tableSchem);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 根据指定用户名与表名获取其中列字段名

*

* @param schemaName

* @param tableName

* @return

*/

public Map getColumnNameBySchemaNameAndTableName(String schemaName, String tableName) {

Map columns = null;

try {

columns = new HashMap<>();

ResultSet rs = dbMetaData.getColumns(null, schemaName, tableName, "%");

while (rs.next()) {

String columnName = rs.getString("COLUMN_NAME");// 列名

String dataTypeName = rs.getString("TYPE_NAME");// java.sql.Types类型名称

int columnSize = rs.getInt("COLUMN_SIZE");// 列大小

Field field = new Field(columnName, dataTypeName, columnSize);

columns.put(columnName, field);

}

} catch (SQLException e) {

e.printStackTrace();

}

return columns;

}

/**

* 获得一个表的主键信息

*/

public String getPrimaryKeyBySchemaNameAndTableName(String schemaName, String tableName) {

String primaryKey = null;

try {

ResultSet rs = dbMetaData.getPrimaryKeys(null, schemaName, tableName);

while (rs.next()) {

primaryKey = rs.getString("COLUMN_NAME");

}

} catch (SQLException e) {

e.printStackTrace();

}

return primaryKey;

}

/**

* 获得表或视图中的所有列信息

*/

public void getTableColumns(String schemaName, String tableName) {

try {

ResultSet rs = dbMetaData.getColumns(null, schemaName, tableName, "%");

while (rs.next()) {

String tableCat = rs.getString("TABLE_CAT");// 表目录(可能为空)

String tableSchemaName = rs.getString("TABLE_SCHEM");// 表的架构(可能为空)

String tableName_ = rs.getString("TABLE_NAME");// 表名

String columnName = rs.getString("COLUMN_NAME");// 列名

int dataType = rs.getInt("DATA_TYPE"); // 对应的java.sql.Types类型

String dataTypeName = rs.getString("TYPE_NAME");// java.sql.Types类型

// 名称

int columnSize = rs.getInt("COLUMN_SIZE");// 列大小

int decimalDigits = rs.getInt("DECIMAL_DIGITS");// 小数位数

int numPrecRadix = rs.getInt("NUM_PREC_RADIX");// 基数(通常是10或2)

int nullAble = rs.getInt("NULLABLE");// 是否允许为null

String remarks = rs.getString("REMARKS");// 列描述

String columnDef = rs.getString("COLUMN_DEF");// 默认值

int sqlDataType = rs.getInt("SQL_DATA_TYPE");// sql数据类型

int sqlDatetimeSub = rs.getInt("SQL_DATETIME_SUB"); // SQL日期时间分?

int charOctetLength = rs.getInt("CHAR_OCTET_LENGTH"); // char类型的列中的最大字节数

int ordinalPosition = rs.getInt("ORDINAL_POSITION"); // 表中列的索引(从1开始)

/**

* ISO规则用来确定某一列的为空性。 是---如果该参数可以包括空值; 无---如果参数不能包含空值

* 空字符串---如果参数为空性是未知的

*/

String isNullAble = rs.getString("IS_NULLABLE");

/**

* 指示此列是否是自动递增 是---如果该列是自动递增 无---如果不是自动递增列 空字串---如果不能确定它是否

* 列是自动递增的参数是未知

*/

String isAutoincrement = rs.getString("IS_AUTOINCREMENT");

System.out.println(tableCat + "-" + tableSchemaName + "-" + tableName_ + "-" + columnName + "-"

+ dataType + "-" + dataTypeName + "-" + columnSize + "-" + decimalDigits + "-" + numPrecRadix

+ "-" + nullAble + "-" + remarks + "-" + columnDef + "-" + sqlDataType + "-" + sqlDatetimeSub

+ charOctetLength + "-" + ordinalPosition + "-" + isNullAble + "-" + isAutoincrement + "-");

}

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 获得一个表的索引信息

*/

public void getIndexInfo(String schemaName, String tableName) {

try {

ResultSet rs = dbMetaData.getIndexInfo(null, schemaName, tableName, true, true);

while (rs.next()) {

boolean nonUnique = rs.getBoolean("NON_UNIQUE");// 非唯一索引(Can

// index values

// be

// non-unique.

// false when

// TYPE is

// tableIndexStatistic

// )

String indexQualifier = rs.getString("INDEX_QUALIFIER");// 索引目录(可能为空)

String indexName = rs.getString("INDEX_NAME");// 索引的名称

short type = rs.getShort("TYPE");// 索引类型

short ordinalPosition = rs.getShort("ORDINAL_POSITION");// 在索引列顺序号

String columnName = rs.getString("COLUMN_NAME");// 列名

String ascOrDesc = rs.getString("ASC_OR_DESC");// 列排序顺序:升序还是降序

int cardinality = rs.getInt("CARDINALITY"); // 基数

System.out.println(nonUnique + "-" + indexQualifier + "-" + indexName + "-" + type + "-"

+ ordinalPosition + "-" + columnName + "-" + ascOrDesc + "-" + cardinality);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 获得一个表的主键信息

*/

public void getAllPrimaryKeys(String schemaName, String tableName) {

try {

ResultSet rs = dbMetaData.getPrimaryKeys(null, schemaName, tableName);

while (rs.next()) {

String columnName = rs.getString("COLUMN_NAME");// 列名

short keySeq = rs.getShort("KEY_SEQ");// 序列号(主键内值1表示第一列的主键,值2代表主键内的第二列)

String pkName = rs.getString("PK_NAME"); // 主键名称

System.out.println(columnName + "-" + keySeq + "-" + pkName);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 获得一个表的外键信息

*/

public void getAllExportedKeys(String schemaName, String tableName) {

try {

ResultSet rs = dbMetaData.getExportedKeys(null, schemaName, tableName);

while (rs.next()) {

String pkTableCat = rs.getString("PKTABLE_CAT");// 主键表的目录(可能为空)

String pkTableSchem = rs.getString("PKTABLE_SCHEM");// 主键表的架构(可能为空)

String pkTableName = rs.getString("PKTABLE_NAME");// 主键表名

String pkColumnName = rs.getString("PKCOLUMN_NAME");// 主键列名

String fkTableCat = rs.getString("FKTABLE_CAT");// 外键的表的目录(可能为空)出口(可能为null)

String fkTableSchem = rs.getString("FKTABLE_SCHEM");// 外键表的架构(可能为空)出口(可能为空)

String fkTableName = rs.getString("FKTABLE_NAME");// 外键表名

String fkColumnName = rs.getString("FKCOLUMN_NAME"); // 外键列名

short keySeq = rs.getShort("KEY_SEQ");// 序列号(外键内值1表示第一列的外键,值2代表在第二列的外键)。

/**

* hat happens to foreign key when primary is updated:

* importedNoAction - do not allow update of primary key if it

* has been imported importedKeyCascade - change imported key to

* agree with primary key update importedKeySetNull - change

* imported key to NULL if its primary key has been updated

* importedKeySetDefault - change imported key to default values

* if its primary key has been updated importedKeyRestrict -

* same as importedKeyNoAction (for ODBC 2.x compatibility)

*/

short updateRule = rs.getShort("UPDATE_RULE");

/**

* What happens to the foreign key when primary is deleted.

* importedKeyNoAction - do not allow delete of primary key if

* it has been imported importedKeyCascade - delete rows that

* import a deleted key importedKeySetNull - change imported key

* to NULL if its primary key has been deleted

* importedKeyRestrict - same as importedKeyNoAction (for ODBC

* 2.x compatibility) importedKeySetDefault - change imported

* key to default if its primary key has been deleted

*/

short delRule = rs.getShort("DELETE_RULE");

String fkName = rs.getString("FK_NAME");// 外键的名称(可能为空)

String pkName = rs.getString("PK_NAME");// 主键的名称(可能为空)

/**

* can the evaluation of foreign key constraints be deferred

* until commit importedKeyInitiallyDeferred - see SQL92 for

* definition importedKeyInitiallyImmediate - see SQL92 for

* definition importedKeyNotDeferrable - see SQL92 for

* definition

*/

short deferRability = rs.getShort("DEFERRABILITY");

System.out.println(pkTableCat + "-" + pkTableSchem + "-" + pkTableName + "-" + pkColumnName + "-"

+ fkTableCat + "-" + fkTableSchem + "-" + fkTableName + "-" + fkColumnName + "-" + keySeq + "-"

+ updateRule + "-" + delRule + "-" + fkName + "-" + pkName + "-" + deferRability);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

public void colseCon() {

try {

if (con != null) {

con.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

DatabaseMetaUtil metaData = new DatabaseMetaUtil();

// metaData.getDataBaseInformations();

// metaData.getAllTableList(null);

// metaData.getAllViewList(null);

// metaData.getAllSchemas();

// metaData.getTableColumns("root", "gen_person");

// System.out.println("=======================");

// metaData.getIndexInfo("root", "gen_person");

// System.out.println("=======================");

metaData.getAllPrimaryKeys("root", "gen_person");

// System.out.println("=======================");

// metaData.getAllExportedKeys("root", "gen_person");

// System.out.println("=======================");

// Map columnNameBySchemaNameAndTableName =

// metaData.getColumnNameBySchemaNameAndTableName("root", "gen_person");

// Set> entrySet =

// columnNameBySchemaNameAndTableName.entrySet();

// for (Entry entry : entrySet) {

// System.out.println("key:" + entry.getKey());

// System.out.println("value:" + entry.getValue().toString());

// }

}

}

新版本使用到的Field类:

package com.genratesql.pojo;

public class Field {

private String fieldName;

private String fieldType;

private Integer fieldLength;

public Field() {

}

public Field(String fieldName, String fieldType, Integer fieldLength) {

this.fieldName = fieldName;

this.fieldType = fieldType;

this.fieldLength = fieldLength;

}

public String getFieldName() {

return fieldName;

}

public void setFieldName(String fieldName) {

this.fieldName = fieldName;

}

public String getFieldType() {

return fieldType;

}

public void setFieldType(String fieldType) {

this.fieldType = fieldType;

}

public Integer getFieldLength() {

return fieldLength;

}

public void setFieldLength(Integer fieldLength) {

this.fieldLength = fieldLength;

}

@Override

public String toString() {

return "Field [fieldName=" + fieldName + ", fieldType=" + fieldType + ", fieldLength=" + fieldLength + "]";

}

}

====

原始版本:

package com.zsw.test;

import java.sql.Connection;

import java.sql.DatabaseMetaData;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

public class DatabaseMetaDateApplication {

private DatabaseMetaData dbMetaData = null;

private Connection con = null;

public DatabaseMetaDateApplication() {

this.getDatabaseMetaData();

}

private void getDatabaseMetaData() {

try {

if (dbMetaData == null) {

Class.forName("com.mysql.jdbc.Driver");

String url = "jdbc:mysql://localhost:3306/creation_cms";

String user = "root";

String password = "root";

con = DriverManager.getConnection(url, user, password);

dbMetaData = con.getMetaData();

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 获得数据库的一些相关信息

*/

public void getDataBaseInformations() {

try {

System.out.println("数据库已知的用户: "+ dbMetaData.getUserName());

System.out.println("数据库的系统函数的逗号分隔列表: "+ dbMetaData.getSystemFunctions());

System.out.println("数据库的时间和日期函数的逗号分隔列表: "+ dbMetaData.getTimeDateFunctions());

System.out.println("数据库的字符串函数的逗号分隔列表: "+ dbMetaData.getStringFunctions());

System.out.println("数据库供应商用于 'schema' 的首选术语: "+ dbMetaData.getSchemaTerm());

System.out.println("数据库URL: " + dbMetaData.getURL());

System.out.println("是否允许只读:" + dbMetaData.isReadOnly());

System.out.println("数据库的产品名称:" + dbMetaData.getDatabaseProductName());

System.out.println("数据库的版本:" + dbMetaData.getDatabaseProductVersion());

System.out.println("驱动程序的名称:" + dbMetaData.getDriverName());

System.out.println("驱动程序的版本:" + dbMetaData.getDriverVersion());

System.out.println();

System.out.println("数据库中使用的表类型");

ResultSet rs = dbMetaData.getTableTypes();

while (rs.next()) {

System.out.println(rs.getString(1));

}

rs.close();

System.out.println();

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 获得该用户下面的所有表

*/

public void getAllTableList(String schemaName) {

try {

// table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".

String[] types = { "TABLE" };

ResultSet rs = dbMetaData.getTables(null, schemaName, "%", types);

while (rs.next()) {

String tableName = rs.getString("TABLE_NAME"); //表名

String tableType = rs.getString("TABLE_TYPE"); //表类型

String remarks = rs.getString("REMARKS"); //表备注

System.out.println(tableName + "-" + tableType + "-" + remarks);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 获得该用户下面的所有视图

*/

public void getAllViewList(String schemaName) {

try{

String[] types = { "VIEW" };

ResultSet rs = dbMetaData.getTables(null, schemaName, "%", types);

while (rs.next()){

String viewName = rs.getString("TABLE_NAME"); //视图名

String viewType = rs.getString("TABLE_TYPE"); //视图类型

String remarks = rs.getString("REMARKS");//视图备注

System.out.println(viewName + "-" + viewType + "-" + remarks);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

/**

* 获得数据库中所有方案名称

*/

public void getAllSchemas(){

try{

ResultSet rs = dbMetaData.getSchemas();

while (rs.next()){

String tableSchem = rs.getString("TABLE_SCHEM");

System.out.println(tableSchem);

}

} catch (SQLException e){

e.printStackTrace();

}

}

/**

* 获得表或视图中的所有列信息

*/

public void getTableColumns(String schemaName, String tableName) {

try{

ResultSet rs = dbMetaData.getColumns(null, schemaName, tableName, "%");

while (rs.next()){

String tableCat = rs.getString("TABLE_CAT");//表目录(可能为空)

String tableSchemaName = rs.getString("TABLE_SCHEM");//表的架构(可能为空)

String tableName_ = rs.getString("TABLE_NAME");//表名

String columnName = rs.getString("COLUMN_NAME");//列名

int dataType = rs.getInt("DATA_TYPE"); //对应的java.sql.Types类型

String dataTypeName = rs.getString("TYPE_NAME");//java.sql.Types类型 名称

int columnSize = rs.getInt("COLUMN_SIZE");//列大小

int decimalDigits = rs.getInt("DECIMAL_DIGITS");//小数位数

int numPrecRadix = rs.getInt("NUM_PREC_RADIX");//基数(通常是10或2)

int nullAble = rs.getInt("NULLABLE");//是否允许为null

String remarks = rs.getString("REMARKS");//列描述

String columnDef = rs.getString("COLUMN_DEF");//默认值

int sqlDataType = rs.getInt("SQL_DATA_TYPE");//sql数据类型

int sqlDatetimeSub = rs.getInt("SQL_DATETIME_SUB"); //SQL日期时间分?

int charOctetLength = rs.getInt("CHAR_OCTET_LENGTH"); //char类型的列中的最大字节数

int ordinalPosition = rs.getInt("ORDINAL_POSITION"); //表中列的索引(从1开始)

/**

* ISO规则用来确定某一列的为空性。

* 是---如果该参数可以包括空值;

* 无---如果参数不能包含空值

* 空字符串---如果参数为空性是未知的

*/

String isNullAble = rs.getString("IS_NULLABLE");

/**

* 指示此列是否是自动递增

* 是---如果该列是自动递增

* 无---如果不是自动递增列

* 空字串---如果不能确定它是否

* 列是自动递增的参数是未知

*/

String isAutoincrement = rs.getString("IS_AUTOINCREMENT");

System.out.println(tableCat + "-" + tableSchemaName + "-" + tableName_ + "-" + columnName + "-"

+ dataType + "-" + dataTypeName + "-" + columnSize + "-" + decimalDigits + "-" + numPrecRadix

+ "-" + nullAble + "-" + remarks + "-" + columnDef + "-" + sqlDataType + "-" + sqlDatetimeSub

+ charOctetLength + "-" + ordinalPosition + "-" + isNullAble + "-" + isAutoincrement + "-");

}

} catch (SQLException e){

e.printStackTrace();

}

}

/**

* 获得一个表的索引信息

*/

public void getIndexInfo(String schemaName, String tableName) {

try{

ResultSet rs = dbMetaData.getIndexInfo(null, schemaName, tableName, true, true);

while (rs.next()){

boolean nonUnique = rs.getBoolean("NON_UNIQUE");//非唯一索引(Can index values be non-unique. false when TYPE is tableIndexStatistic )

String indexQualifier = rs.getString("INDEX_QUALIFIER");//索引目录(可能为空)

String indexName = rs.getString("INDEX_NAME");//索引的名称

short type = rs.getShort("TYPE");//索引类型

short ordinalPosition = rs.getShort("ORDINAL_POSITION");//在索引列顺序号

String columnName = rs.getString("COLUMN_NAME");//列名

String ascOrDesc = rs.getString("ASC_OR_DESC");//列排序顺序:升序还是降序

int cardinality = rs.getInt("CARDINALITY"); //基数

System.out.println(nonUnique + "-" + indexQualifier + "-" + indexName + "-" + type + "-" + ordinalPosition + "-" + columnName + "-" + ascOrDesc + "-" + cardinality);

}

} catch (SQLException e){

e.printStackTrace();

}

}

/**

* 获得一个表的主键信息

*/

public void getAllPrimaryKeys(String schemaName, String tableName) {

try{

ResultSet rs = dbMetaData.getPrimaryKeys(null, schemaName, tableName);

while (rs.next()){

String columnName = rs.getString("COLUMN_NAME");//列名

short keySeq = rs.getShort("KEY_SEQ");//序列号(主键内值1表示第一列的主键,值2代表主键内的第二列)

String pkName = rs.getString("PK_NAME"); //主键名称

System.out.println(columnName + "-" + keySeq + "-" + pkName);

}

}catch (SQLException e){

e.printStackTrace();

}

}

/**

* 获得一个表的外键信息

*/

public void getAllExportedKeys(String schemaName, String tableName) {

try{

ResultSet rs = dbMetaData.getExportedKeys(null, schemaName, tableName);

while (rs.next()){

String pkTableCat = rs.getString("PKTABLE_CAT");//主键表的目录(可能为空)

String pkTableSchem = rs.getString("PKTABLE_SCHEM");//主键表的架构(可能为空)

String pkTableName = rs.getString("PKTABLE_NAME");//主键表名

String pkColumnName = rs.getString("PKCOLUMN_NAME");//主键列名

String fkTableCat = rs.getString("FKTABLE_CAT");//外键的表的目录(可能为空)出口(可能为null)

String fkTableSchem = rs.getString("FKTABLE_SCHEM");//外键表的架构(可能为空)出口(可能为空)

String fkTableName = rs.getString("FKTABLE_NAME");//外键表名

String fkColumnName = rs.getString("FKCOLUMN_NAME"); //外键列名

short keySeq = rs.getShort("KEY_SEQ");//序列号(外键内值1表示第一列的外键,值2代表在第二列的外键)。

/**

* hat happens to foreign key when primary is updated:

* importedNoAction - do not allow update of primary key if it has been imported

* importedKeyCascade - change imported key to agree with primary key update

* importedKeySetNull - change imported key to NULL if its primary key has been updated

* importedKeySetDefault - change imported key to default values if its primary key has been updated

* importedKeyRestrict - same as importedKeyNoAction (for ODBC 2.x compatibility)

*/

short updateRule = rs.getShort("UPDATE_RULE");

/**

* What happens to the foreign key when primary is deleted.

* importedKeyNoAction - do not allow delete of primary key if it has been imported

* importedKeyCascade - delete rows that import a deleted key

* importedKeySetNull - change imported key to NULL if its primary key has been deleted

* importedKeyRestrict - same as importedKeyNoAction (for ODBC 2.x compatibility)

* importedKeySetDefault - change imported key to default if its primary key has been deleted

*/

short delRule = rs.getShort("DELETE_RULE");

String fkName = rs.getString("FK_NAME");//外键的名称(可能为空)

String pkName = rs.getString("PK_NAME");//主键的名称(可能为空)

/**

* can the evaluation of foreign key constraints be deferred until commit

* importedKeyInitiallyDeferred - see SQL92 for definition

* importedKeyInitiallyImmediate - see SQL92 for definition

* importedKeyNotDeferrable - see SQL92 for definition

*/

short deferRability = rs.getShort("DEFERRABILITY");

System.out.println(pkTableCat + "-" + pkTableSchem + "-" + pkTableName + "-" + pkColumnName + "-"

+ fkTableCat + "-" + fkTableSchem + "-" + fkTableName + "-" + fkColumnName + "-" + keySeq + "-"

+ updateRule + "-" + delRule + "-" + fkName + "-" + pkName + "-" + deferRability);

}

} catch (SQLException e){

e.printStackTrace();

}

}

public void colseCon() {

try {

if (con != null) {

con.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

DatabaseMetaDateApplication metaData = new DatabaseMetaDateApplication();

//metaData.getDataBaseInformations();

//metaData.getAllTableList(null);

//metaData.getAllViewList(null);

//metaData.getAllSchemas();

//metaData.getTableColumns(null, "zsc_admin");

//metaData.getIndexInfo(null, "zsc_admin");

//metaData.getAllPrimaryKeys(null, "zsc_admin");

metaData.getAllExportedKeys(null, "zsc_admin");

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值