数据库信息包括数据库详细信息、数据库基本信息、基本表信息、列信息等内容
1、获取数据库详细信息
DatabaseMetaData对象代表了一个数据库的详细信息,它的方法所获取的数据库系统的信息通常用ResultSet对象的开工返回,可以用ResultSet对象的方法取得数据信息,如getString, getInt等。当返回的数据不可用时,调用ResultSet对象的方法通常会抛出SQLException例外。
//创建DatabaseMetaData
//con为一个Connection对象
DatabaseMetaData dbmd=con.getMetaData();
2、获取数据库基本信息
数据库的基本信息包括JDBC驱动程序名字、数据库表的最大列数、列名的最大字符数等信息。
1)getBestRowIdentifier :获取一个数据库中用来唯一标识一个表的列的最佳集合的描述
//语法
ResultSet getBestRowIdentifier (String catalog, String schema, String table, int scope, Boolean nullable) throws SQLException
参数说明:
catalog: 一个代表目录名的字符串,“”代表程序要获取没有catalog的数据库的信息, null则代表了把catalog从选项中除去
schema:一个代表模式名的字符串
table: 代表了一个表名的字符串
scope: 有三种范围,分别是bestRowTemporary, bestRowTransaction, bestRowSession
nullable:如果这个参数为true, 那么就表示结果中要包含那些列为空的值,否则就除去这些列
该函数的返回值是一个ResultSet对象,每一行都是对一个列的描述,对返回值中的每一个列的描述包括下述几种:
a) scope的作用是指出结果集生效的范围,有以下几种选择:
bestRowTemporary: 只有在使用这个行的时候才生效,有限期非常短
bestRowTransaction:在整个事务中都有效
bestRowSession: 在整个会话中都有效
b) column_name作用 给出列的名称
c) data_type的功能是指出可用的数据类型
d) type_name将给出数据源所使用的类型名
e) column_size将给出列的精度
f) Buffer_length这是一个暂未使用的值
g) pseudo_column指出该列是否是数据库系统产生的列
bestRowUnknow: 可能是pseudo列
bestRowNotPseudo: 不是数据库系统产生的列
bestRowPseudo: 是数据库系统产生的列
//例
ResultSet rs=dbmd.getBestRowIdentifier(null, "SYSTEM", "NEW", 1, true);
2) getTypeInfo: 获取一个数据库系统支持的所有数据类型,每一行都是对一个数据类型的描述返回的每行包括如下的列:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
a) type_name: 数据类型名
b) data_type: 短整型的数,指出在JDBC中映射到本地DBMS数据类型最为合适的数据类型
c) precision: 整型数,指出最大的精度
d) literal_prefix: 可能引用的文字前缀,可能为null
e) literal_suffix: 可能用来引用一个文字的后缀, 可以为null
f) create_params: 创建这种数据类型所用的参数, 可以为空
g) nullable: 指出一个列是否可以为空, 可能值为:
typeNoNulls 不允许为空
typeNullable可以为空
typeNullableUnknown不知道是否可以为空
h) case_sensitive: 如果为真, 则说明这种类型是大小写敏感的
i) searchable: 指出是否可以在where条件语句中使用这种类型,有以下值:
typePreNone: 不可以在where中
typePredChar: 只可以用于where...like语句中
typePredBasic: 除了where....like语句外所有where语句中都可以使用这种数据类型
typeSearchable: 所有where语句都可以使用这种数据类型
j) unsigned_attribute: 如果为true,则这种数据类型是无符号的
k) fixed_prec_scale: 如果为true, 则这种数据类型可以为货币类型
l) auto_increment: 为true则说明这是一个可以自动增加值的类型
m)