![](/img/trans.png)
[英]Java 1.7 CachedRowSet.populate() turns MySQL TINYINT(1) into Boolean. Can this be disabled?
[英]Oracle 1.8 CachedRowSet.populate error where select systimestamp from dual
我有一個簡單的問題...為什么下面的代碼不起作用?
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); ”行拋出“ j ava.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進行解析。 我知道這很丑陋,但是直到我們找到正確的解決方案為止。 我仍然希望有人會幫助我們解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.