从Java程序中的MS Access数据库中获取主键和外键约束。
我尝试使用desc table_name
,但它没有用。
我甚至尝试了DatabaseMetaData.getMetaData(null,null,"table_name")
,但它也没有用。
答案 0 :(得分:0)
使用DatabaseMetadata
类。
从该课程中使用getPrimaryKeys()
方法
答案 1 :(得分:0)
我不知道这是否会带来使用MS Access数据库的问题,但是阅读JDBC规范 您应该执行以下步骤。
从DB使用
获取表格DatabaseMetaData meta = connection.getMetaData();
ResultSet tablesRs = meta.getTables(null, null, "table_name", new String[]{"TABLE"});
使用
获取主键meta.getPrimaryKeys(null, null, "table_name");
获取外键使用
meta.getExportedKeys(null, null, "table_name");
修改强>
它似乎没有为ODBC驱动程序实现,
您必须查看此帖子如何使用与MS Access数据库一起使用的ODBC驱动程序获取主键。
here
使用meta.getIndexInfo(...)
来获取主键
答案 2 :(得分:0)
检索表的元数据很容易。您在表上构造SQL
并执行它。从生成的ResultSet
中,您可以检索MetaDataResultSet
,其中包含字段名称,字段类型nullable and autoincrement
以及其他内容:
试试这个:
ResultSet set =stmt.executeQuery(sql);//stmt is your Prepared or Callable Statement object
ResultSetMetaData resultMeta = set.getMetaData();
for (int i=1;i< =resultMeta.getColumnCount();i++)
{
String fieldName = resultMeta.getColumnName(i);
int type = resultMeta.getColumnType(i); // java.sql.Types
Class _fieldType = convertType(type);
boolean nullable = resultMeta.isNullable(i)!=java.sql.ResultSetMetaData.columnNoNulls;
boolean isAutoincrement = resultMeta.isAutoIncrement(i);
System.out.printf("Field: %s, %s, nullable %b, autoincrement
%b%n",fieldName,_fieldType.getName(),nullable,isAutoincrement);
}
在java.sql.Types中将类型指定为整数常量。 可以从DatabaseMetaData中检索关于约束的信息,该数据库可以从连接中检索。有3种方法:
getPrimaryKeys(catalog,schema,table):
检索包含的ResultSet;每个主键的每列一个条目。
getIndexInfo(catalog,schema,table,unique,false):
检索唯一的索引,否则。检索ResultSet,其中包含每个索引的每列的一个条目。如果unique为false,则结果包含唯一且非唯一的键。
getExportedKeys(catalog,schema,table):
检索包含所有外键的ResultSet;每个键的每列一个条目。
答案 3 :(得分:0)
//获取主键的列名
DatabaseMetaData meta=conn.getMetaData();
rs= meta.getTables(null, null, tablename, new String[]{"TABLE"});
rs=meta.getPrimaryKeys(null, null, tablename);
while(rs.next())
System.out.println("Primery Key :"+rs.getString(4));
//以及外键约束
rs=meta.getExportedKeys(null, null, tablename);
while(rs.next())
System.out.println("Foreign Key :"+rs.getString(4));
答案 4 :(得分:0)
简单的解决方案:
public String getPrimaryKey(String table) throws SQLException
{
con = null;
con = DriverManager.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=//access_file_path/database_name.mdb", "username", "password");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM "+table);
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
String primaryKey_columnName = "";
boolean isAutoIncrement;
for(int x = 1;x<=cols;x++){
isAutoIncrement = rsmd.isAutoIncrement(x);
if(isAutoIncrement){
primaryKey_columnName = rsmd.getColumnName(x);
}
}
rs.close();
con.close();
return primaryKey_columnName;
}