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

来源:互联网 发布:淘宝首页设置全屏 编辑:程序博客网 时间:2024/05/22 09:01

 

    java程序中获取oracle数据库中列的相关信息,通过在网上查询,找到了两种方法。

1.通过查询oracle中的DBA_TAB_COLS表

   

表名:DBA_TAB_COLS

OWNER                                       

TABLE_NAME                          表、视图或聚簇名
COLUMN_NAME                        列名
DATA_TYPE                            列数据类型
DATA_TYPE_MOD                                   
DATA_TYPE_OWNER                               
DATA_LENGTH                        列最大长度
DATA_PRECISION                  Number数据类型的十进制精度,Float数据类型的二进制精度,对其他数据类型则为NULL
DATA_SCALE                          小数点右边位数
NULLABLE                              列是否可为空,如果列有非空约束或该列为关键字一部分则该值为N
COLUMN_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类

 

方法摘要 StringgetCatalogName(int column)
           获取指定列的表目录名称。StringgetColumnClassName(int column)
           如果调用方法 ResultSet.getObject 从列中检索值,则返回构造其实例的 Java 类的完全限定名称。intgetColumnCount()
           返回此 ResultSet 对象中的列数。intgetColumnDisplaySize(int column)
           指示指定列的最大标准宽度,以字符为单位。StringgetColumnLabel(int column)
           获取用于打印输出和显示的指定列的建议标题。StringgetColumnName(int column)
           获取指定列的名称。intgetColumnType(int column)
           检索指定列的 SQL 类型。StringgetColumnTypeName(int column)
           检索指定列的数据库特定的类型名称。intgetPrecision(int column)
           获取指定列的小数位数。intgetScale(int column)
           获取指定列的小数点右边的位数。StringgetSchemaName(int column)
           获取指定列的表模式。StringgetTableName(int column)
           获取指定列的名称。booleanisAutoIncrement(int column)
           指示是否自动为指定列进行编号,这样这些列仍然是只读的。booleanisCaseSensitive(int column)
           指示列的大小写是否有关系。booleanisCurrency(int column)
           指示指定的列是否是一个哈希代码值。booleanisDefinitelyWritable(int column)
           指示在指定的列上进行写操作是否明确可以获得成功。intisNullable(int column)
           指示指定列中的值是否可以为 null。booleanisReadOnly(int column)
           指示指定的列是否明确不可写入。booleanisSearchable(int column)
           指示是否可以在 where 子句中使用指定的列。booleanisSigned(int column)
           指示指定列中的值是否带正负号。booleanisWritable(int column)
           指示在指定的列上进行写操作是否可以获得成功。

 

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

原创粉丝点击