在运行时从Data Type oracle中检测数据类型java

时间:2014-03-21 07:22:06

标签: java oracle types metadata

使用 JAVA 编程语言,我想打印到控制台,将 ORACLE 表中使用的所有数据类型打印到等效的JAVA数据类型;你能帮帮我吗?

例如:

Create table Student (
    STD_ID number (8) primary Key,
    NAME varchar2 (15) not null,
    AGE number (2),
    AVERAGE number (2, 3)
);

运行程序后,输出类似如下:

  1. 整数
  2. 字符串
  3. 我通过以下代码访问 oracle 数据类型,但是将Number数据类型转换为Integer,Double,Short和其他数字数据类型;我有一个问题。

      

    resultset.getMetaData.getColumnType(信息columnCount);

3 个答案:

答案 0 :(得分:1)

  

为什么在上表中输出数字字段会显示java.math.BigDecimal

根据关于数据类型及其Java映射的Oracle文档:

NUMBER

  

NUMBER类提供Oracle Numberlnxnum_t)数据类型与Java类型byte[], byte, short, integer, long, float, double, String, BigIntegerBigDecimal之间的转换。

Understanding Type Maps

  

类型映射将Java类与Oracle对象的SQL类型名称相关联。这是一对一映射,存储在散列表中作为键值对。从Oracle对象读取数据时,JDBC驱动程序会考虑类型映射,以确定使用哪个Java类来实现SQL对象类型中的数据。将数据写入Oracle对象时,JDBC驱动程序通过调用SQLData接口的getSQLTypeName()方法从Java类获取SQL类型名称。 SQL和Java之间的实际转换由驱动程序处理。

这是默认行为,您可以在getObject方法基础返回类型上找到它。对于NUMBER的数据类型,返回类型为java.math.BigDecimal

+-----------------+------------------------+------------------------+
| Oracle SQL Type | getObject()            | getOracleObject()      |
|                 | Underlying Return Type | Underlying Return Type |
+-----------------+------------------------+------------------------+
| CHAR            | String                 | oracle.sql.CHAR        |
| VARCHAR2        | String                 | oracle.sql.CHAR        |
| LONG            | String                 | oracle.sql.CHAR        |
| NUMBER          | java.math.BigDecimal   | oracle.sql.NUMBER      |
| RAW             | byte[]                 | oracle.sql.RAW         |
| LONGRAW         | byte[]                 | oracle.sql.RAW         |
| DATE            | java.sql.Timestamp     | oracle.sql.DATE        |
+-----------------+------------------------+------------------------+

在下面引用的 Summary 页面上的示例中显示了了解数据库特定数据类型的Java返回类型的示例。我在此帖子上的回答中提供了类似的例子。

<强>结论
返回类型是特定于数据库驱动程如果您想为方便起见或出于任何其他原因投放它们,可以进行显式调用,例如getDouble( columnNumber )数据类型列上的NUMBER。您可能需要明确处理返回数字值的精度和比例部分。

请参阅

  1. Oracle's Built-in Data Types
  2. Summary of getObject() and getOracleObject() Return Types
  3. Valid SQL Datatype-Java Class Mappings

答案 1 :(得分:0)

一旦你知道你有一个数字列,你就可以用getPrecision和getScale猜测实际的类型:

  • if getScale()&gt; 0:双重
  • if getPrecision()&gt;一些价值:短
  • 如果getPrecision()介于某个值和其他值之间:整数
  • if getPrecision()&gt;其他一些价值:长。

答案 2 :(得分:0)

  

在运行时从数据类型oracle中检测数据类型java

     

我想打印到控制台,在ORACLE表中使用的所有数据类型与其等效的JAVA数据类型

您可以调用getColumnClassName以获取任何数据库表列的数据类型的JAVA限定类匹配。

示例

ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();

for( int i=1; i <= numberOfColumns; i++ ) {
    // label if defined else name of column
    String columnLabel = rsmd.getColumnLabel( i ); 

    // data type in database
    String columnType = rsmd.getColumnTypeName( i ); 

    // java equivalent class name
    String columnClassName = rsmd.getColumnClassName( i ); 

    System.out.println( "Column Name : " + columnLabel );
    System.out.println( "Column Type : " + columnType );
    System.out.println( "Column Class: " + columnClassName );

    System.out.println();
} // for count of columns

输出示例:类似于:

Column Name : t
Column Type : TIMESTAMP
Column Class: java.sql.Timestamp

Column Name : i
Column Type : INT
Column Class: java.lang.Integer

Column Name : d
Column Type : DATE
Column Class: java.sql.Date

Column Name : e
Column Type : CHAR
Column Class: java.lang.String

Column Name : s
Column Type : VARCHAR
Column Class: java.lang.String

请参阅