我有一个简单的问题...为什么下面的代码不起作用?


JDK版本:1.8.0_92
Oracle DB版本:11.2.0.1.0
Oracle JDBC驱动程序:ojdbc6.jar --->我找不到此Java代码源:(

String SQL = "select systimestamp from dual";

Statement statement = null;
ResultSet rs = null;
try {
    statement = getConnection(name).createStatement();
    if (statement != null) {
        rs = statement.executeQuery(SQL);
    }

    // Need to use a CachedRowSet that caches its rows in memory, which
    // makes it possible to operate without always being connected to
    // its data source
    CachedRowSet rowset = new CachedRowSetImpl();
    rowset.populate(rs);
    return rowset;
} catch (SQLException ex) {
    throw new DatabaseException(ex.getMessage(), ex);
} finally {
    safeCloseResultSet(rs);
    safeCloseStatement(statement);
}



堆栈跟踪:

java.sql.SQLException: Invalid SQL type for column
at javax.sql.rowset.RowSetMetaDataImpl.checkColType(RowSetMetaDataImpl.java:114)
at javax.sql.rowset.RowSetMetaDataImpl.setColumnType(RowSetMetaDataImpl.java:459)
at com.sun.rowset.CachedRowSetImpl.initMetaData(CachedRowSetImpl.java:761)
at com.sun.rowset.CachedRowSetImpl.populate(CachedRowSetImpl.java:639)


行“ rowset.populate(rs);”抛出“ java.sql.SQLException:列的无效SQL类型”

当我尝试执行查询时发生错误:

select systimestamp from dual


但是,如果我使用下面的代码而不是“ rowset.populate(rs);”,它将起作用:

rs.getTimestamp(1)


而且,如果我尝试执行以下查询,则一切正常:

select sysdate from dual


那么,如何使用rowset.populate(rs)获取syscurrenttimestamp?

我开始认为这是Oracle的jdbc实现的错误...

对不起,我的英语不好:)

最佳答案

正如@krokodilko所建议的那样,我将在此处发布我的评论作为答案:

我最终以姑息解决方案解决了这个问题。我没有执行查询以返回TIMESTAMP,而是使它返回了STRING:

SELECT TO_CHAR(SYSTIMESTAMP, 'DD/MM/YYYY HH24:MI:SS.SSXFF TZR') FROM DUAL


然后我必须对TIMESTAMP进行解析。我知道这很丑陋,但是直到我们找到正确的解决方案为止。我仍然希望有人会帮助我们解决这个问题。

10-06 02:23