解决JAVA超出打开游标的最大数异常

最近使用PreparedStatement编写代码,遇到ORA-00604:递归SQL级别1出现错误,ORA-01000:超出打开游标的最大数异常,起初修改了pstat.executeUpdate();之后关闭pstat.close();但是依旧报错。后来把conn.prepareStatement(sql);移出for循环即可。

public String insertOperation(List<Map<String, Object>> list) throws Exception {
		Connection conn = null;
		//数据库连接
		if (conn == null || conn.isClosed()) {
			conn = DataSourcePool.getConnection();
		}
		String sql = "INSERT INTO a(id, name, age) VALUES(?, ?, ?)";
		String sql2 = "INSERT INTO b(id, classId, className) VALUES(?, ?, ?)";
		PreparedStatement pstat = conn.prepareStatement(sql);
		PreparedStatement pstat2 = conn.prepareStatement(sql2);
		List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
		Map<String,Object> result = new HashMap<String,Object>();
		try {
			if (list != null && list.size() >0) {
				for (int i = 0; i < list.size(); i++) {
					result = new HashMap<String, Object>();
					result.put("id", list.get(i).get("id"));
					result.put("result", "true");
					result.put("message", "成功");
					conn.setAutoCommit(false);
					pstat.setString(1, list.get(i).get("id").toString());
					pstat.setString(2, list.get(i).get("name").toString());
					pstat.setInt(3, Integer.parseInt(list.get(i).get("age").toString()));
					pstat.executeUpdate();
					pstat2.setString(1, list.get(i).get("id").toString());
					pstat2.setString(2, list.get(i).get("classId").toString());
					pstat2.setString(3, list.get(i).get("className").toString());
					pstat2.executeUpdate();
					conn.commit();
					conn.setAutoCommit(true);
					resultList.add(result);
				}
			} else {
				result.put("result", "false");
				result.put("message", "数据为空");
				resultList.add(result);
				return JSONArray.fromObject(resultList).toString();
			}
			
		} catch (Exception e) {
			result.put("result", "false");
			result.put("message", "操作失败:" + e.getMessage());
			resultList.add(result);
			conn.rollback();
		} finally {
			if (pstat != null) {
				pstat.close();
			}
			if (pstat2 != null) {
				pstat2.close();
			}
			if (conn != null) {
				conn.close();
			}
		}
		return JSONArray.fromObject(resultList).toString();
	}

执行的SQL其实很多,以2个为例。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值