Oracle数据库中Long类型的问题!

hehecafe 2003-01-22 11:56:02
请问各位在使用Oracle时有碰见过以下的异常吗:
java.sql.SQLException: Io 异常: 违反协议
java.sql.SQLException: Refcursor 值无效
java.sql.SQLException: 类型长度大于最大值
java.sql.SQLException: Io 异常: 不在流模式下

这几个异常把我搞得头昏脑胀!!也花了我几乎两个月的时间!毫无头绪!一次偶然的机会,我将原来数据库中所有的Long类型改为varchar2类型,奇怪,问题居然消失了!
我在读取Long类型的时候是用getString方法的,插入也是插入一个字符串,在sqlplus下执行没有问题,但在程序中执行却不行。唉 ??
...全文
119 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanty 2003-01-22
  • 打赏
  • 举报
回复
需要注意:将来的精度可能要成问题
qxjavajava 2003-01-22
  • 打赏
  • 举报
回复
这个问题很长见的。需要吧传进来的string 转换成Long 型的。

因为这个原因改数据库中的子段属性,不是一个明智的选择!
hehecafe 2003-01-22
  • 打赏
  • 举报
回复
问题已经解决,原因在于Oracle JDBC驱动读写Oracle的Long类型数据时,是通过流来读写的,多线程访问时就会出现问题,我测试了以下几种情况下对Long类型的数据执行select操作(每个线程执行5次操作,每种情况测试4次,读取Long类型数据使用getString()方法):

编号 线程数 连接池容量 加锁 出错
1 1 1 否 否
2 3 1 否 否
3 10 1 否 否
4 10 2 否 是
5 10 3 否 是
6 10 4 否 是
7 10 6 否 是
8 6 6 否 是
9 6 7 否 是
10 6 8 否 是
11 6 9 否 是

加了锁后,不会出现错误,但速度马上慢下来。所以在多线程情况下,建议不使用Long类型,以Varchar2取代。

谢谢大家的参与,小弟无以为保,只有分数,请大家笑纳 :)
hehecafe 2003-01-22
  • 打赏
  • 举报
回复
那么请问各位,出现以上异常的原因是什么?
nullhue 2003-01-22
  • 打赏
  • 举报
回复
建议把数值类型都转换为Number型,然后再存到数据库中.

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧