java中isclosed_java.sql.SQLException: Conntion is closed.解决方法
最近在一个java调用oracle存储过程的程序中,经行压力测试老报java.sql.SQLException: Conntion is closed,间歇中冶也有java.sql.SQLException: Conntion is closed。如果对java调用oracle存储过程不太清楚的可以查看http://tiantiankaixin.iteye.com/blog/770250,这里讲的比较清楚了。
就这个错误我查看了网上的各种资料发现了有着两种可能:
(1)
1 private static String sql = null;2 String rtn = null;3
4 @POST5 //无参数传入
6 public String RK_JSCX() throwsException {7
8 RK_JSCX_Response response = null;9 List list = null;10 Connection con = null;11 CallableStatement cs = null;12 ResultSet rs = null;13 try{14
15 //存储过程
16 sql = "{call RK_JSCX(?,?)}";17 con =ConnectionUtils.getInstance().getConnect();18
19 if(con.isClosed()) {20 throw new IllegalStateException("ERROR.THE CONNECTION ISCLOSED");21 }22
23 cs =con.prepareCall(sql);24
25 //传出参数
26 cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); //传出参数 类型和CK_XQ中的要一致
27 cs.registerOutParameter(2, Types.VARCHAR);28
29 //执行存储过程
30 cs.execute();31
32 rs = (ResultSet) cs.getObject(1);33 list = new ArrayList();34 while(rs.next()) {35
36 RK_JSCX_Outtable out = new RK_JSCX_Outtable(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getInt(5), rs.getString(6));37
38 list.add(out);39 }40 String outInfo = cs.getString(2);41
42
43 response = newRK_JSCX_Response(list, outInfo);44
45 } catch(SQLException e) {46
47 e.printStackTrace();48
49 } catch(Exception e) {50
51 e.printStackTrace();52
53 }finally{54
55 try{56 if (rs != null) {57 rs.close();58 if (cs != null) {59 cs.close();60 }61 if (con != null) {62 con.close();63 }64 }65 } catch(SQLException e) {66
67 System.out.println("Exception2");68 e.printStackTrace();69 }70 }71 72 returnJSON.toJSONString(response);73 }
调用存储过程的时候需要打开资源:connection,CallableStatement,ResultSet 记得打开后全部关闭了,关闭顺序和打开相反。如果顺序错了就会报java.sql.SQLException: Conntion is closed。
(2)在并发情况下,把connection,CallableStatement,ResultSet都设置成了成员变量而报错,我就是犯了这个错误。其实应该设置为局部变量,原因我想了一下 conn.close();好像不是释放链接,是关闭链接,而设成成员变量在多个请求同时访问时会大量的数据库连接无法释放(特别是在设计不是很好的情况下)。当你取得链接到达你连接池设置中的数量后,链接就都被你关闭了。所以当你再次去取的时候,就会报错。换句话说你每次取得的链接用完就关闭了,而没有还给连接池。
java中isclosed_java.sql.SQLException: Conntion is closed.解决方法相关推荐
- mybatis项目报错:java.sql.SQLException: ORA-00911: 无效字符 解决方法
mybatis项目报错:java.sql.SQLException: ORA-00911: 无效字符 解决方法 参考文章: (1)mybatis项目报错:java.sql.SQLException: ...
- opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类
opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...
- Java中的OutOfMemoryError的各种情况及解决方法
转载自博客园:https://www.cnblogs.com/duanxz/p/4901437.html Java中的OutOfMemoryError的各种情况及解决和JVM内存结构 在JVM中内存一 ...
- java无效字符 怎么解决_java.sql.SQLException: ORA-00911: 无效字符 解决方法
java建立oracle数据库,查询是出现以下错误信息: ava.sql.SQLException: ORA-00911: 无效字符 at oracle.jdbc.driver.DatabaseErr ...
- java.sql.SQLException: ORA-00911: 无效字符 解决方法
如果你用java写程序访问数据库,出现这个问题: java.sql.SQLException: ORA-00911: 无效字符 at oracle.jdbc.driver.DatabaseError. ...
- java中double类型精度丢失问题及解决方法
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源: https://blog.csdn.net/yacolsp ...
- java出现Resource leak: 'input' is never closed 解决方法
- java steam 去重_Java中对List去重 Stream去重的解决方法
问题 当下互联网技术成熟,越来越多的趋向去中心化.分布式.流计算,使得很多以前在数据库侧做的事情放到了Java端.今天有人问道,如果数据库字段没有索引,那么应该如何根据该字段去重?大家都一致认为用Ja ...
- java.sql.SQLException: Connection is closed
如果没用第三方组件来配置数据源,程序会默认使用tomcat容器内建的DHCP连接池组建. <Resource auth="Container" driverClassName ...
最新文章
- posix_kill 信号
- css:hover选择器
- 在JavaScript中实现yield,实用简洁实现方式。
- SAP中国,在中国,为中国,一些包含了SAP logo的NBA运动套装
- redis 持久化性能_高性能持久消息
- Api demo源码学习(8)--App/Activity/QuickContactsDemo --获取系统联系人信息
- linux下Zlib的安装与使用
- android 3d侧拉抽屉,iOS动画指南 - 4.右拉的3D抽屉效果
- android Xmpp+openfire 消息推送 :SASL authentication failed using mechanism DIGEST-MD5
- sql server,mysql,oracle 获取上一月时间
- 白话SOA:面向服务+组件+架构
- 重庆理工大学c语言实验答案,重庆理工大学C语言实验答案.doc
- CardView覆盖问题
- oppo文件管理android在哪里,OPPO手机中缓存视频文件路径在哪里查看?怎么查看?
- 一个完整的增删改查模块(以我们的项目‘危化品库管理’模块为例)
- mysql格式化日期的函数_MySql格式化日期函数
- 【Java】全栈工程师
- ChatGPT怎么突然变得这么强?华人博士万字长文深度拆解GPT-3.5能力起源
- Redhat linux 安装 gcc编译器,Gcc源码包,rpm包安装方法!
- P2P网贷平台运营必知