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

 

    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类

 

方法摘要
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是不需要定义长度的)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值