有没有办法在Oracle / JDBC中区分DATE和TIMESTAMP?

ps0*_*604 7 java oracle jboss jdbc wildfly

我有一个Java应用程序,用户可以select在屏幕上构建SQL 语句。一旦他们输入select,我将使用JDBC分析列类型。

对于Oracle,DATE类型的JDBC等效项是java.sql.Types.Timestamp,因为DATE包括时间。

问题是我需要根据列类型设置结果集的格式。如果是DATE,则需要格式化value 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);
        }
Run Code Online (Sandbox Code Playgroud)

这将打印两次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)) 
Run Code Online (Sandbox Code Playgroud)

注意:我正在Wildfly 14上运行它

我试图将sql Connection oracle.sql强制转换为OracleConnection(以获取类型),并且Wildfly引发:

org.jboss.jca.adapters.jdbc.jdk8.WrappedConnectionJDK8无法转换为oracle.jdbc.OracleConnection

Mạn*_*yễn 4

您可以用来ResultSetMetdata#getColumnTypeName获取实际的数据库类型名称

检索指定列的特定于数据库的类型名称。

返回数据库使用的类型名称。如果列类型是用户定义的类型,则返回完全限定的类型名称。