使用 JAVA 编程语言,我想打印到控制台,将 ORACLE 表中使用的所有数据类型打印到等效的JAVA数据类型;你能帮帮我吗?
例如:
Create table Student (
STD_ID number (8) primary Key,
NAME varchar2 (15) not null,
AGE number (2),
AVERAGE number (2, 3)
);
运行程序后,输出类似如下:
我通过以下代码访问 oracle 数据类型,但是将Number数据类型转换为Integer,Double,Short和其他数字数据类型;我有一个问题。
resultset.getMetaData.getColumnType(信息columnCount);
答案 0 :(得分:1)
为什么在上表中输出数字字段会显示
java.math.BigDecimal
?
根据关于数据类型及其Java映射的Oracle
文档:
NUMBER
类提供OracleNumber
(lnxnum_t
)数据类型与Java类型byte[], byte, short, integer, long, float, double, String, BigInteger
和BigDecimal
之间的转换。
类型映射将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 :(得分:0)
一旦你知道你有一个数字列,你就可以用getPrecision和getScale猜测实际的类型:
答案 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
请参阅: