您的位置:首页 > 编程语言 > Java开发

java查询数据库表的相关信息

2010-07-20 10:44 381 查看
     java程序中获取oracle数据库中列的相关信息,通过在网上查询,找到了两种方法。

1.通过查询oracle中的DBA_TAB_COLS表

   表名:DBA_TAB_COLSOWNER                                      TABLE_NAME                          表、视图或聚簇名COLUMN_NAME                        列名DATA_TYPE                            列数据类型DATA_TYPE_MOD                                   DATA_TYPE_OWNER                               DATA_LENGTH                        列最大长度DATA_PRECISION                  Number数据类型的十进制精度,Float数据类型的二进制精度,对其他数据类型则为NULLDATA_SCALE                          小数点右边位数NULLABLE                              列是否可为空,如果列有非空约束或该列为关键字一部分则该值为NCOLUMN_ID                            列创建序列号DEFAULT_LENGTH                   当前列宽度DATA_DEFAULT                      列默认值NUM_DISTINCT                     LOW_VALUE                            本字段和下一字段为:对三行以上的表,该列的第二小或第二大的值,对三行或少于三行的表,即为最小和最大值。该统计值为前32字节的16进制表示法HIGH_VALUE                          同上一字段DENSITY                               NUM_NULLS                           NUM_BUCKETS                       LAST_ANALYZED                   SAMPLE_SIZE                       CHARACTER_SET_NAME          CHAR_COL_DECL_LENGTH      GLOBAL_STATS                     USER_STATS                         AVG_COL_LEN

2.使用ResultSetMetaData类

 
方法摘要
String
getCatalogName


(int column)
           获取指定列的表目录名称。
String
getColumnClassName


(int column)
           如果调用方法
ResultSet.getObject
从列中检索值,则返回构造其实例的 Java 类的完全限定名称。
int
getColumnCount


()
           返回此
ResultSet
对象中的列数。
int
getColumnDisplaySize


(int column)
           指示指定列的最大标准宽度,以字符为单位。
String
getColumnLabel


(int column)
           获取用于打印输出和显示的指定列的建议标题。
String
getColumnName


(int column)
           获取指定列的名称。
int
getColumnType


(int column)
           检索指定列的 SQL 类型。
String
getColumnTypeName


(int column)
           检索指定列的数据库特定的类型名称。
int
getPrecision


(int column)
           获取指定列的小数位数。
int
getScale


(int
column)
           获取指定列的小数点右边的位数。
String
getSchemaName


(int column)
           获取指定列的表模式。
String
getTableName


(int column)
           获取指定列的名称。
boolean
isAutoIncrement


(int column)
           指示是否自动为指定列进行编号,这样这些列仍然是只读的。
boolean
isCaseSensitive


(int column)
           指示列的大小写是否有关系。
boolean
isCurrency


(int column)
           指示指定的列是否是一个哈希代码值。
boolean
isDefinitelyWritable


(int column)
           指示在指定的列上进行写操作是否明确可以获得成功。
int
isNullable


(int column)
           指示指定列中的值是否可以为 null。
boolean
isReadOnly


(int column)
           指示指定的列是否明确不可写入。
boolean
isSearchable


(int column)
           指示是否可以在 where 子句中使用指定的列。
boolean
isSigned


(int
column)
           指示指定列中的值是否带正负号。
boolean
isWritable


(int column)
           指示在指定的列上进行写操作是否可以获得成功。
 两种方法都可以达到目的。但是在获取列的最大允许字符长度上出现了一些问题。经过实验得知,DBA_TAB_COLS表的data_length给的是当前列所属数据类型的最大长度,而不是列的最大允许字符长度,比如number型的数据,给出的值是22,而实际允许长度却是10。而DATA_PRECISION则只能给出number,float类型数据的最大允许字符长度,对于其他类型的数据全是null。相比之下ResultSetMetaData类的返回值则可以给出满意的答案。getColumnDisplaySize方法给出的是列所属类型的最大长度,和data_length一样。 而getPrecision方法则可以返回列的最大允许字符长度,其中,date型的返回0,定义类型的时候date是不需要定义长度的)。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息