获取主键和外键约束

时间:2013-03-12 09:30:12

标签: java ms-access

从Java程序中的MS Access数据库中获取主键和外键约束。

我尝试使用desc table_name,但它没有用。

我甚至尝试了DatabaseMetaData.getMetaData(null,null,"table_name"),但它也没有用。

5 个答案:

答案 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;    
  }