永发信息网

请问一个java里的sql错误

答案:6  悬赏:70  手机版
解决时间 2021-04-06 05:28
  • 提问者网友:溺爱和你
  • 2021-04-05 09:30
java.sql.SQLException: 无法从套接字读取更多的数据
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1118)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1

搜了一下 好像很多这样类型的错误 但是也没见有个具体解决的办法 请问谁有什么好办法吗 解决了给50分吧

用的是 statement.executeQuery(sqlText); 操作的oracle数据库

我也打印了sql语句 在pl里运行是ok的 而且出错也特别奇怪 运行到个100 200次的时候才出错

那个表是在时时查询 5秒一次 前面几十次的时候都能运行 到了100多次以后 就出这个错误 而且错误提示的sql语句和前面打印输出的语句是一样的

我看了一下 用完以后是关闭了的 我用PL 里看回话的时候 也就只有一个 也没有增加很多

.next() 这个是用了的 所以 这个问题很奇怪
最佳答案
  • 五星知识达人网友:掌灯师
  • 2021-04-05 10:34
你的数据库游标关闭了没有啊?

操作数据库要养成良好的习惯,在使用完毕后一定要把数据库的游标,结果集和连接关闭, 因为数据库有限制最大游标数量的限制.你查一次开一次.数据库就多一个游标.当游标多到一定程度数据库就崩溃了.

按照你的语句你的
statement.close()加上了没有?

由于给的不够详细.你看看不是这方面的问题
全部回答
  • 1楼网友:七十二街
  • 2021-04-05 14:40
大概是SQL语句的问题 这是对oracle链接还是对数据操作?给的不够详细
  • 2楼网友:往事隔山水
  • 2021-04-05 13:40
连接 没有释放干净~ 你可以再写一个方法 每操作一次后 调用此方法 来释放连接 这样 你到10000次 都不会出错 private PreparedStatement ps = null; private Connection con = null; private ResultSet rs = null; public void freeCon() { rs=null; try { if (ps != null) ps.close(); } catch(SQLException e) {System.out.print(e.getMessage());} try { if (con != null) con.close(); } catch (SQLException e){System.out.print(e.getMessage()); } }
  • 3楼网友:西岸风
  • 2021-04-05 12:25
是表中已经没有数据了吧!用了rs.next()没有啊? while(rs.next()){ --里面才有数据的! }
  • 4楼网友:渊鱼
  • 2021-04-05 11:59
可以都用string取出来 resultsetmetadata meta = rs.getmetadata(); int icolnums = meta.getcolumncount(); while (rs.next()) { for (int i = 1; i <= icolnums; i++) { stemp = rs.getstring(i); if (stemp == null) stemp = ""; } }
  • 5楼网友:行雁书
  • 2021-04-05 11:47
操作数据库太频繁了。应该避免的。。。。可能是数据库的内存不足了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯