做一个插入操作.在本机(操作系统为winxp)Oracle9I测试通过.在服务器上(操作系统为linux)Oracle10g,dxvo.getContent()为英文字母时测试通过.dxvo.getContent()有中文时报错.谢谢各位看看.
代码如下:
String sql="insert into tbinfo values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
conn=DB.getConnection();
stmt = (Statement) conn.createStatement();
StringReader rcon = new StringReader(dxvo.getContent()); PreparedStatement ps=conn.prepareStatement(sql);
ps.setLong(1, Sms_mt_tmp_dxvo.getId());
...
...
ps.setCharacterStream(7, rcon, dxvo.getContent().length());//这样写的理由是:用了PreparedStatement 防止插入超长内容时会报错.
ps.execute();报错如下:.ORA-01461: can bind a LONG value only for insert into a LONG columnjava.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:304)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:622)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:180)
at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:542)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1027)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2887)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:2978)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
代码如下:
String sql="insert into tbinfo values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
conn=DB.getConnection();
stmt = (Statement) conn.createStatement();
StringReader rcon = new StringReader(dxvo.getContent()); PreparedStatement ps=conn.prepareStatement(sql);
ps.setLong(1, Sms_mt_tmp_dxvo.getId());
...
...
ps.setCharacterStream(7, rcon, dxvo.getContent().length());//这样写的理由是:用了PreparedStatement 防止插入超长内容时会报错.
ps.execute();报错如下:.ORA-01461: can bind a LONG value only for insert into a LONG columnjava.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:304)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:271)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:622)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:180)
at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:542)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1027)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2887)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:2978)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
ps.setLong(1, Sms_mt_tmp_dxvo.getId());
当dxvo.getContent()里面有中文的时候就报错.
本机没问题.就服务器上不行.