- 作者: 三十而立
- 时间:2009年10月12日 6:19:59
- 本文出自 “inthirties(三十而立) ”博客,转载请务必注明作者和保留出处http://blog.csdn.net/inthirties/archive/2009/10/12/4658969.aspx
?
?
?
前几天给大家推出了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(