這個問題昨天我糾結了一天啊,在網上也沒有搜出來什麼東西,不過仍是對我有必定的影響滴,而後昨天晚上一直在這裏奮戰,其實也不全是搞這個問題,隨意的作,很偶然滴試了一種辦法,沒想到,盡然成功了,興奮啊,就出來八一八~~~
----------------------------------------------------------------------------------------------------------------------------
我使用的java寫的,因此錯誤的詳情以下:
java.sql.SQLException: ORA-01704: string literal too long
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:213)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:952)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1160)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3390)
at myPackage.test.main(test.java:39)java
因爲數據庫裏定義的字段類型是varchar2(size)類型,而varchar2所規定的最高上限是4000,若是插入超過4000的話,就會報這個錯誤,而後上網搜了好久,大部分都說改爲long或者clob類型,可是試了一下,仍是這個錯誤,long和clob所規定最大上限2G和4G徹底成爲空談。而後偶然看到一個大牛人物講到使用PreparedStatement能夠避免這個錯誤,因而又徹底把全部的Statement全調換成PreparedStatement仍是不能夠,而後其中有一個細節問題就是PreparedStatement的傳參問題,我開始搞的不是很懂,後來試了一下這個,固然是隨便試了一下,沒想到居然成功了,而後接着這個傳參問題就一清二楚了。sql
先講一下這個傳參問題:
(PreparedStatement).setString(parameterIndex, x)
這只是裏邊一個方法而已,具體設置什麼類型,根據你字段的定義而定。
其中參數1 parameterIndex是指的數據庫表中第幾個字段屬性,他標記的是從1開始的,好比說一個表裏邊有兩個字段屬性(id,name)其中id是number類型,name是varchar2類型,那麼設置的時候設置兩個值就能夠了,即:
state.setInt(1, count);//count爲int類型
state.setString(2,str);//str爲String類型數據庫
而後說一下怎麼解決上面這個異常的:
好比說要插入一個字段,我能夠在sql語句裏徹底寫爲空,好比說這個表裏字段只有兩個,一個number,一個clob,由於要存入超過4000個,因此只能使用clob類型了,固然也可使用long。我寫一小段程序模擬一下:oracle
//數據庫鏈接已完畢 PreparedStatement state=conn.prepareStatement("insert into test values(?,?)"); String str=""; for(int i=0;i<10000;++i) { str+="abcdefghigklmnopqrstuvwxyz"; } state.setInt(1,1); state.setString(2,str); state.execute(); //關閉全部鏈接
而後執行,能夠成功插入
-----------------------------------------------------------------------------------------------------
以上是糾結了一天的問題,發現網上並無什麼特別清晰的答案,因此既然偶然的成功了,那就把這種經驗分享一下,但願你們可以不吝賜教,有什麼更好的辦法,歡迎共享~
spa