前段時間在作一登陸模塊時,遇到一個文本輸入的問題。即,文本的最大值爲40000,varchar2類型的,當輸入的內容爲40000時,卻報錯。後來查看一下才知道是oracle問題。 參考資料以下: 1、異常狀況: 有了必定Java編程經驗以後,通常都使用PreparedStatement代替Statement。 但實際開發中對數據庫進行操做時,字段遇到大數據而且該字段爲非BLOB,CLOB的類型時,若採用PreparedStatement方法setString方法時會以下異常: java.sql.SQLException: 數據大小超出此類型的最大值 實際數據庫定義字段長度爲:4000,而包裝的數據內容長度只有1000左右 2、分析緣由: 一、驅動程序在把SQL語句發給數據庫前,PreparedStatement對字符串進行預處理並進行了轉義替換; 二、字符集緣由。 3、解決辦法: 經過閱讀PreparedStatement文檔,setCharacterStream方法能夠解決這個問題: stmt.setCharacterStream(1, new InputStreamReader(String內容, String內容.length()); 4、案例總結: JDBC在轉換過程當中對字符串的長度作了限制。這個限制和數據庫中字段的實際長度沒有關係。而setCharacterStream()方法能夠逃過字符 轉換限制,也就成爲了解決此問題的方案之一。JDBC對轉換字符長度的限制是爲了轉換過程當中的數據擴展。根據實際測試結果,在ZHS16GBK字符集和 thin驅動下,2000-4000長度的varchar字段都只能插入1333個字節(約666個漢字)。 故解決PreparedStatement的setString中字符串長度問題能夠有兩種辦法: 一、使用setCharacterStream()方法; 二、使用OCI驅動鏈接Oracle數據庫。