今天在调试下面这段代码时总是出现“ora-01000 超出打开游标的最大数”这个错误,上网查了一下,主要原因是:Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。
for(int m=0;m<ydbm.length;m++){
String sqlbx="insert into yw_ggbmxx (bm_code,gg_code,sfyd,opcode,opname,opdate) values (?,?,?,?,?,sysdate)";
pstmtb = conn.prepareStatement(sqlbx);
pstmtb.setString(1, ydbm[m]);
pstmtb.setString(2, seq);
pstmtb.setInt(3, 0);
pstmtb.setString(4, ggxx.getOpcode());
pstmtb.setString(5, ggxx.getFbr());
pstmtb.executeUpdate();
conn.commit();
}
所以将上述代码段中的几行移出循环就可以解决问题。如下就不会提示错误了。
String sqlbx="insert into yw_ggbmxx (bm_code,gg_code,sfyd,opcode,opname,opdate) values (?,?,?,?,?,sysdate)";
pstmtb = conn.prepareStatement(sqlbx);
for(int m=0;m<ydbm.length;m++){
pstmtb.setString(1, ydbm[m]);
pstmtb.setString(2, seq);
pstmtb.setInt(3, 0);
pstmtb.setString(4, ggxx.getOpcode());
pstmtb.setString(5, ggxx.getFbr());
pstmtb.executeUpdate();
conn.commit();
}
分享到:
相关推荐
超出打开游标的最大数的原因和解决方案 在 Oracle 数据库中,游标(cursor)是一种临时工作区,用于存储查询结果。每个会话可以打开多个游标,但存在一个限制,即 OPEN_CURSORS 参数指定的最大游标数。如果应用程序...
当程序在处理大量数据或者进行复杂操作时,可能会遇到“超出打开游标最大数”的错误,即ORA-01000异常。这个错误通常表明数据库当前打开的游标数量超过了`open_cursors`参数所设定的最大值。 首先,我们需要理解为...
- 优化代码:查找并修正那些可能导致游标泄漏的代码段,确保每次打开游标后都正确关闭。 - 调整并发量:如果问题源于高并发操作,可能需要调整并发控制策略,例如使用批量处理,减少单个用户的游标使用。 - 监控...
忘记关闭游标可能导致超出打开游标最大数的错误。 - 游标也可以返回到存储过程或函数,使得调用者可以处理结果集。 10. **最佳实践**: - 只在必要时使用游标,因为它们消耗内存和CPU资源。 - 尽可能使用集操作...
当尝试打开一个已经打开的游标时触发此异常。 **解决方法:** - 在打开新的游标之前关闭已有的游标。 - 确保游标的状态管理正确,避免重复打开同一游标。 #### 5. DUP_VAL_ON_INDEX (ORA-00001) **异常描述:** 当...
6. INVALID_CURSOR:如果在不合法的游标上执行操作,比如一个已经关闭或从未打开过的游标,系统会抛出此异常。 7. INVALID_NUMBER:当尝试将字符串转换为数字,但转换失败时,Oracle会抛出此异常。 8. NO_DATA_...
6. `Invalid_cursor` (ora-01001):在非法游标上执行操作,如未打开游标即尝试提取数据。 7. `Invalid_number` (ora-01722):尝试将非法字符串转换为数字。 8. `No_data_found` (ora-01403):SELECT INTO 未返回任何...
- **场景示例**:如果试图从未开启的游标中读取数据,或关闭一个未被打开的游标,将触发此异常。 #### 7. INVALID_NUMBER - **异常描述**:当SQL语句无法将字符串转换为数值时触发。 - **错误代码**:ORA-01722 - *...
2、解决Oracle一次转换的表过多时出现超出打开游标的最大数异常,现在测试了一次生成四百多张表 的DTO和Entity成功完成转换,只是表太多速度有点慢。 3、内存占用优化,对占用的内存资源进行清理,极大的减少了...
- 举例:索引值不在合法范围内,如负数或超出最大限制。 16. **SYS_INVALID_ROWID (ORA-01410)** - 描述:字符到ROWID的转换失败,因为字符不代表有效的ROWID。 - 举例:尝试将无效的ROWID字符串转换为ROWID。 ...
- `ORA-6511 CURSOR-already-OPEN`:试图打开一个已处于打开状态的游标。 - `ORA-6530 Access-INTO-null`:试图为null对象的属性赋值。 - `ORA-6531 Collection-is-null`:试图将Exists以外的集合方法应用于一个null...
- **异常说明**:游标已打开。 - **常见原因**: - 尝试在同一作用域内多次打开同一个游标。 - 未正确关闭游标。 - **解决方案**: - 确保每个游标仅在一个作用域内被打开一次。 - 在使用完游标后立即关闭它。 ...
16. **SUBSCRIPT_BEYOND_COUNT** (ORA-06533): 当尝试访问嵌套表或VARRAY元素的下标超出其范围时,会触发此异常。确保下标在有效范围内。 17. **SUBSCRIPT_OUTSIDE_LIMIT** (ORA-06532): 当使用嵌套表或VARRAY元素...
`Cursor_already_open`异常会在尝试打开已打开的游标时触发;`No_data_found`异常会在`SELECT INTO`语句未找到匹配行时触发;`Too_many_rows`异常则会在`SELECT INTO`语句返回多行时触发;`Invalid_number`异常出现...
`INVALID_CURSOR`(ORA-01001)异常会在试图使用无效的游标时发生,比如游标已经被关闭或者从未被正确打开过。 **解决方法:** 1. **确保游标正确打开**:在执行任何读取或写入操作前,确认游标是有效的且处于打开...
4. **CURSOR_ALREADY_OPEN**:当试图在一个已经打开的游标上再次执行OPEN语句时触发。每个游标只能处于打开状态一次,避免资源浪费和冲突。 5. **DUP_VAL_ON_INDEX**:在唯一性索引的列上插入或更新重复值时触发。...
- 动态游标:允许在打开游标时动态设定SQL语句,更灵活,适用于未知或变化的查询。 5. 动态执行SQL语句的游标: - 动态游标通过Ref Cursor类型实现,如示例所示,声明一个Ref Cursor类型的变量,然后在运行时通过...
- **54000**:超出 SQL 限制,或超出产品限制,表示操作超出了 SQL 或产品的最大限制。 34. **55 - 对象不处于先决条件状态** - **55000**:对象不处于先决条件状态,表示对象的状态不符合操作的要求。 35. **56...
- **36** - **游标灵敏度异常**:游标灵敏度设置不正确。 - **38** - **外部函数异常**:外部函数调用过程中出现异常。 - **39** - **外部函数调用异常**:外部函数调用失败。 - **3B** - **SAVEPOINT无效**:...
| 0100D | 关闭的游标已在链中的下一个结果集上重新打开。 | | 0100E | 生成的过程大于允许的最大结果集数目。只有第一个整数结果集已经返回到调用者。 | | 01503 | 结果列数比提供的主机变量数大。 | | 01504 | ...