我有一个Java应用程序,用户可以在屏幕上构建SQL select
语句。一旦他们输入select
,我将使用JDBC分析列类型。
对于Oracle,DATE类型的JDBC等效项为java.sql.Types.Timestamp
,因为DATE包含时间。
问题是我需要根据列类型设置结果集的格式。如果是DATE,则需要格式化值YYYY-MM-DD
。如果是TIMESTAMP,则需要格式化值YYYY-MM-DD HH:MM:SS
。
我需要在JDBC中区分DATE和TIMESTAMP结果。有没有办法做到这一点?
示例代码:
String sql = "select date_col, timestamp_col from some_table";
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData meta = rs.getMetaData();
int count = meta.getColumnCount();
for (int i=1;i <= count;i++) {
int type = meta.getColumnType(i);
System.out.println(type);
}
这将打印两次93,即java.sql.Types.Timestamp
。
CREATE TABLE "DB1"."SOME_TABLE"
("SOMENUM" NUMBER(9,0),
"DATE_COL" DATE,
"TIMESTAMP_COL" TIMESTAMP (6),
"ACCOUNT" NUMBER(9,0),
"BALANCE" FLOAT(126))
注意:我正在Wildfly 14上运行它
我试图将sql Connection强制转换为OracleConnection(以获取oracle.sql
类型)和Wildfly抛出:
org.jboss.jca.adapters.jdbc.jdk8.WrappedConnectionJDK8无法转换 到oracle.jdbc.OracleConnection
答案 0 :(得分:4)
您可以使用str.format
来获取实际的数据库类型名称
检索指定列的数据库特定类型名称。
数据库使用的返回类型名称。如果列类型是用户定义的类型,则返回完全限定的类型名称。