掌中招聘网 » 掌中论坛 » 全部 » (求助)超高难度java   在连接做一个插入操作.在本机(操作系统为winxp)Oracle9I测试通过.在服务器上(操作系统为linux)报错.
首页 上一页 下一页 尾页 
 本页主题: (求助)超高难度java   在连接做一个插入操作.在本机(操作系统为winxp)Oracle9I测试通过.在服务器上(操作系统为linux)报错.
 


GeoPeeker

积分:60
发表主题:56




 发表于 2009-06-23 17:25 资料
楼主

做一个插入操作.在本机(操作系统为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 column

java.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)
回复1: ORA-01461: can bind a LONG value only for insert into a LONG column

明显是类型不匹配嘛,检查一下服务器中的表的数据类型,另外linux和windows的数据类型也不尽相同的。
回复2: 确实难
呵呵
回复3: 应该就是ID那个字段出错了吧。
ps.setLong(1, Sms_mt_tmp_dxvo.getId());
回复4: dxvo.getContent()为String  存到数据库段的类型为VARCHAR2

当dxvo.getContent()里面有中文的时候就报错.
本机没问题.就服务器上不行.

首页 上一页 下一页 尾页 
 各地招聘导航
·北京 ·天津 ·上海
·西安 ·东莞 ·广州
·深圳 ·南京 ·杭州
·济南 ·南昌 ·兰州
·合肥 ·长沙 ·武汉
·成都 ·重庆 ·太原
·福州 ·沈阳 ·南宁
·海口 ·贵阳 ·郑州
·银川 ·西宁 ·昆明
·拉萨 ·长春
·石家庄  ·乌鲁木齐
·哈尔滨  ·呼和浩特
 各地兼职导航
·北京 ·天津 ·上海
·西安 ·东莞 ·广州
·深圳 ·南京 ·杭州
·济南 ·南昌 ·兰州
·合肥 ·长沙 ·武汉
·成都 ·重庆 ·太原
·福州 ·沈阳 ·南宁
·海口 ·贵阳 ·郑州
·银川 ·西宁 ·昆明
·拉萨 ·长春
·石家庄  ·乌鲁木齐
·哈尔滨  ·呼和浩特