2013-05-29 50 views
1

当字段RAWDATA有超过4000个字符时,出现ORA-01704: string literal too long错误。数据类型是CLOB。我正在使用Java 1.4和Oracle 10g。ORA-01704:Oracle 10g中的字符串文字太长

stmt = conn.prepareStatement("INSERT INTO RAWDATA_EQUIFAX (REQ_ID, BUREAU_CODE, RAWDATA, RESP_TIME) VALUES (?, ?, ?, ?)"); 

stmt.setInt(1, RequestID); 
stmt.setString(2, bureau_code); 
stmt.setString(3, rawData); 
stmt.setTimestamp(4, new Timestamp(date.getTime())); 
stmt.executeUpdate(); 
conn.commit(); 
+1

预计其中:a VARCHAR2列有4000最大长度,这也代表了在查询中使用文字真。使用CLOB参数。 – fge

+0

其在oracle中的CLOB,仍然出现错误 – user215005

+2

有一个Java/Oracle CLOB示例[此处](http://docs.oracle.com/javase/tutorial/jdbc/basics/blob.html)。 –

回答

3

不要使用PreparedStatement#setString()设置Clob
有一个PreparedStatement#setClob()方法,您可以改为使用。

+0

我刚刚把它stmt.setClob(3,rawData);并且出现错误:类型PreparedStatement中的setClob(int,Clob)方法不适用于参数(int,String) – user215005

+1

还有其他'setClob()'方法。你有没有尝试过'setClob(3,new StringReader(rawData))'? – Keppil

0

我认为你应该使用这个为CLOB参数设置给PreparedStatement:

Clob clob = conn.createClob(); 
clob.setString(1, rawData); 
stmt.setClob(3, clob); 
clob.free(); 
相关问题