時獲取的列值被截斷我有一個程序使用非常簡單的查詢從Oracle 10g(10.2.0.3)中提取大型數據集。幾乎可以將查詢/邏輯稱爲「導出」類,因爲它從具有最小where子句的表中選擇列(即,它返回大部分(如果不是全部)行)。SQLException:執行while(rs.getNext())
的【JAVA]代碼是樣板,我們都看到:
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = getConnection(Person);
pstmt = con.prepareStatement(
"SELECT ID, FIRST_NAME, LAST_NAME, ... FROM PERSON WHERE ...");
rs = pstmt.executeQuery();
while (rs.next()) {
// write the data to a file
}
}
finally {
if (rs != null) try { rs.close(); } catch (Exception e) { }
if (pstmt != null) try {pstmt.close(); } catch (Exception e) { }
if (con != null) try { con.close() ; } catch (Exception e) { }
}
的getConnection是我自己的方法,該方法返回一個Connection對象到用於「人」表中的Oracle數據庫。這感覺像一個平凡的編程問題,但我已經寫了這麼多次的代碼,從來沒有這個問題。
我收到一個java.sql.SQLException:ORA-01406:fetched列值在while(rs.next())行被截斷。我讀過的Oracle文檔說「FETCH操作被迫截斷字符串」。它建議使用更大的列緩衝區來保存最大的列。但這沒有意義。在上面代碼中被註釋爲「將數據寫入文件」的部分中,我簡單地寫每一列與rs.getBigDecimal(「ID」),rs.getString(「FIRST_NAME」等等一樣。事實上,使用一個空的while循環重現該區域,這個循環對ResultSet什麼都不做,也就是說,只是迭代ResultSet導致拋出SQLException
返回的數據集的大小應該大約爲100萬行。後通過循環約600,000行/迭代例外。任何想法?
當的SQLException在rs.next()拋出,我沒有訪問導致錯誤的行。異常之前的最後一行不會顯示任何奇怪的內容。我仍在調查,但我傾向於編碼/字符寬度問題,如igor-db所示。 – brmiller 2009-01-20 03:46:38