在运行时从数据类型oracle检测数据类型java
通过使用JAVA编程语言,我想将ORACLE表中使用的所有数据类型打印到控制台,并转换为其等效的JAVA数据类型;你能帮我吗 例如:在运行时从数据类型oracle检测数据类型java,java,oracle,types,metadata,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) ); 运行程序后,输出类似于以下内容: 整数 串 短 双重的 我通过下面的代码到达orac
Create table Student (
STD_ID number (8) primary Key,
NAME varchar2 (15) not null,
AGE number (2),
AVERAGE number (2, 3)
);
运行程序后,输出类似于以下内容:
一旦知道有数字列,就可以使用getPrecision和getScale猜测实际类型:
- 如果getScale()>0:double
- 如果getPrecision()>某个值:short
- 如果getPrecision()介于某个值和另一个值之间:integer
- 如果getPrecision()>其他值:long
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
请参阅:
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
-
- 返回Java类的完全限定名,如果调用方法ResultSet.getObject从列中检索值,则会生成其实例
java.math.BigDecimal
根据有关数据类型及其Java映射的Oracle
文档:
:
NUMBER
类提供OracleNUMBER
(lnxnum\u 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 |
+-----------------+------------------------+------------------------+
下面的摘要页面上的示例展示了理解特定于数据库的数据类型的Java返回类型的示例。类似的例子也出现在我之前对这篇文章的回答中
结论:返回类型是特定于数据库驱动程序的。如果出于方便或任何其他原因想要强制转换它们,可以进行显式调用,例如,对
NUMBER
数据类型列执行getDouble(columnNumber)
之类的调用。您可能需要显式处理返回数值的精度和比例部分
请参阅:
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
请仔细看答案3。为什么上表中数字字段的输出显示java.math.BigDecimal?你应该把它添加到你的帖子中,而不是添加答案。这个答案看起来像一个问题,但不是答案。最好把它添加到你的问题中。@user3184842:我在这里添加了关于这个新问题的另一个答案。请检查。亲爱的@user3184842,你能给你的答案添加链接吗?@user3184842:在这篇帖子上,一个。