现在的位置: 首页 > 综合 > 正文

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

2013年03月27日 ⁄ 综合 ⁄ 共 2491字 ⁄ 字号 评论关闭

 

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



抱歉!评论已关闭.