jdbc读取数据库里的表信息之姊妹篇(读取字段和主键信息)

前几天给大家推出了jdbc读取数据库里的信息--表信息,受到大家关注,被推荐至blog精华。

在这篇文章里,主要给大家介绍的是,通过DatabaseMetaData进行调用,从而获得整个数据库里的table的信息,该文可详见http://blog.csdn.net/inthirties/archive/2009/10/09/4646557.aspx , 通过这个方法,我们可以用java得到类似数据库字典的功能。 不过由于篇幅有限,所以上篇文章,仅仅讲到表的整体信息,有了整体的表字典,有研究兴趣的朋友马上就想到,那我们能不能再进一步,得到表的具体的结构信息 叻,比如,字段,主外键,索引字段这些表内的具体信息叻。 那么我们就一起进一步探讨有关读取表里具体信息的方法。

当然还是用上次介绍的DatabaseMetaData,

首先我们一起看看表的字段信息

表的字段信息

可以用

dbMeta.getColumns(catalog, schemaPattern, tableNamePattern, columnNamePattern) 

tableNamePattern 表名 
columnNamePattern 指定的字段名 如果所有的 放空 

这里每个参数的详细含义,可以参考java doc。

如下sample代码

result = dbMeta.getColumns(null, null, table, null); 


while(result.next()) 

System.out.print(result.getObject("TABLE_CAT")+" "); 
System.out.print(result.getObject("TABLE_SCHEM")+" "); 
System.out.print(result.getObject("TABLE_NAME")+" "); 
System.out.print(result.getObject("COLUMN_NAME")+" "); 
System.out.print(result.getObject("DATA_TYPE")+" "); 
System.out.print(result.getObject("TYPE_NAME")+" "); 
System.out.print(result.getObject("COLUMN_SIZE")+" "); 
System.out.print(result.getObject("BUFFER_LENGTH")+" "); 
System.out.print(result.getObject("DECIMAL_DIGITS")+" "); 
System.out.print(result.getObject("NUM_PREC_RADIX")+" "); 

System.out.print(result.getObject("NULLABLE")+" "); 
System.out.print(result.getObject("REMARKS")+" "); 
System.out.print(result.getObject("COLUMN_DEF")+" "); 
System.out.print(result.getObject("SQL_DATA_TYPE")+" "); 
System.out.print(result.getObject("SQL_DATETIME_SUB")+" "); 
System.out.print(result.getObject("CHAR_OCTET_LENGTH")+" "); 
System.out.print(result.getObject("ORDINAL_POSITION")+" "); 
System.out.print(result.getObject("IS_NULLABLE")+" "); 
System.out.print(result.getObject("SCOPE_CATALOG")+" "); 
System.out.print(result.getObject("SCOPE_SCHEMA")+" "); 
System.out.print(result.getObject("SCOPE_TABLE")+" "); 
System.out.print(result.getObject("SOURCE_DATA_TYPE")+" "); 
System.out.print(result.getObject("IS_AUTOINCREMENT")+" "); 

System.out.println(); 
}

上面都是JDBC标准中的meta信息,具体的值,需要参考数据库jdbc厂商的实现。

除了读取基本的字段信息。DatabaseMetaData还提供了查找主键的接口

dbMeta.getPrimaryKeys(catalog, schema, tablename); 

这里的tablename就是你想要读取的数据库表

通过这个api我们可以查看一个表的主键信息。

比如

DatabaseMetaData dbMeta = conn.getMetaData(); 

ResultSet pkRSet = dbMeta.getPrimaryKeys(null, null, "test"); 

int column = pkRSet.getMetaData().getColumnCount(); 

System.out.println(" =================== Primary Key ["+table+"] ================"); 

while(pkRSet.next()) 

System.out.print(pkRSet.getObject("TABLE_CAT")+" "); 
System.out.print(pkRSet.getObject("TABLE_SCHEM")+" "); 
System.out.print(pkRSet.getObject("TABLE_NAME")+" "); 
System.out.print(pkRSet.getObject("COLUMN_NAME")+" "); 
System.out.print(pkRSet.getObject("KEY_SEQ")+" "); 
System.out.print(pkRSet.getObject("PK_NAME")+" "); 

System.out.println(); 

程序结果如下

CATLOG SCHEMA TABLE_NAME  COLUMN_NAME  KEY_SEQ  PK_NAME

poc        null         test_parent   id                       1               PRIMARY 

这里是poc这个schema里的表test_parent的主键信息,有一个主键,主键的字段在id字段上。这里如果是复合主键的话,会有多个信息。

通过KEY_SEQ来反映出主键的顺序关系。

这里的PK_NAME是这个主键的名称,在Mysql里主键不指定都用这个PRIMARY代替了。在Oracle里可以测试一下不同之处。

在 这个文章里,我们一起看到了字段信息和主键信息。 外键信息,也是一个非常重要而且有意义的信息,可以反映出表之间的关系,所以databaseMetaData提供的方法更为细致。 在下一篇文章里,我们再继续给大家介绍--jdbc读取数据库里的表信息之姊妹篇(读取外键信息)。

猜你喜欢

转载自wangemperor.iteye.com/blog/1773225