今天采集Excel数据时候,老是报错:ORA-01000: 超出打开游标的最大数,可我的PrepareStatement明明是关掉的,最后发现是我for循环(含有一个PrepareStatement)中调用了另一个for(含有另一个PrepareStatement),类似递归的判断,难怪会出现“超出”的问题,后来在每一个PrepareStatement使用完,(rs完工后),马上将其关掉,问题就没有了,不过目前我的数据量不是很大,如果还有这个问题,恐怕我就不能光调试程序了,将oracle的open cursor改的大一点,初始值为300.
由于问题出现,所以差了一些资料,对于如何修改open cursor,见下:
文件路径:oracle的安装目录下,admin文件夹下,对应找到你的库名,里面有个pfile文件夹,就在那个里面有个init.ora文件,在里面找到相应的语句,改掉就可以了,已上是我的想法,如有问题,那只能接着处理了
对于避免出现类似的问题,在java中编码一定要注意:在循环中释放游标
网上的话:
很多朋友在Java开发中,使用Oracle数据库的时候,经常会碰到有ORA-01000: maximum open cursors exceeded.的错误。
实际上,这个错误的原因,主要还是代码问题引起的。
ora-01000: maximum open cursors exceeded.
表示已经达到一个进程打开的最大游标数。
这样的错误很容易出现在Java代码中的主要原因是:Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。
一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statment关闭。
对于出现ORA-01000错误这种情况,单纯的加大open_cursors并不是好办法,那只是治标不治本。实际上,代码中的隐患并没有解除。
而且,绝大部分情况下,open_cursors只需要设置一个比较小的值,就足够使用了,除非有非常特别的要求。
解决:
String sql = "insert into t_domainname(id,name) values (SEQ_DOMAINNAME.Nextval,?)";
conn = JDBCUtil.generateConn();
conn.setAutoCommit(false);
for(String name:list) {
ps = conn.prepareStatement(sql);
ps.setString(1, name);
ps.execute();
ps.close();//增加改行代码
}
conn.commit();
分享到:
相关推荐
如果应用程序打开的游标数超过这个限制,会引发 ORA-01000: maximum open cursors exceeded 异常。下面将探讨超出打开游标的最大数的原因和解决方案。 原因 应用程序打开的游标数超过 OPEN_CURSORS 参数指定的最大...
解决疑难问题,针对偏僻的问题:oracle超出打开游标的最大数的原因和解决方案,希望能对大家操作数据库有用处
当使用无效的游标时触发此异常,可能是因为游标尚未被正确打开。 **解决方法:** - 确保在使用游标之前已正确打开它。 - 检查游标的打开状态和使用方式。 #### 7. INVALID_NUMBER (ORA-01722) **异常描述:** 当...
当程序在处理大量数据或者进行复杂操作时,可能会遇到“超出打开游标最大数”的错误,即ORA-01000异常。这个错误通常表明数据库当前打开的游标数量超过了`open_cursors`参数所设定的最大值。 首先,我们需要理解为...
1. ORA-01000: 达到最大打开游标数 - 表示应用程序打开了过多的游标,超过了系统允许的最大值。解决方法是优化代码,关闭不再使用的游标,或者增加`OPEN_CURSORS`初始化参数的值。 2. ORA-01422: 指定的行数超出...
3. **ORA-12003**: 实际的游标与声明的游标不匹配,可能是返回的列数或类型不一致。 4. **ORA-12004**: 在REFRESHFAST操作中遇到了问题,这通常用于刷新物化视图,可能是因为缺少必要的索引或视图定义不正确。 5. ...
- 举例:索引值不在合法范围内,如负数或超出最大限制。 16. **SYS_INVALID_ROWID (ORA-01410)** - 描述:字符到ROWID的转换失败,因为字符不代表有效的ROWID。 - 举例:尝试将无效的ROWID字符串转换为ROWID。 ...
- 确保在使用游标之前已正确打开。 - 在使用完成后关闭游标,并避免后续使用已关闭的游标。 #### ORA-1012:NOT_LOGGED_ON - **异常说明**:未登录Oracle。 - **常见原因**: - 连接字符串错误。 - 用户名或...
当一个会话达到其资源限制时,如最大打开游标数、最大连接时间等,会抛出此错误。这通常意味着会话配置需要调整,或者系统资源不足。 #### ORA-00021: Instance recovery in progress 在实例恢复过程中执行操作时...
**ORA-17072**:说明值太大错误,通常是因为值超出允许的最大范围。 **ORA-17074**:未知模式错误,可能是因为使用了未定义的模式。 **ORA-17075**:只能转换错误,通常涉及到数据类型的转换问题。 **ORA-17076**...
6. `Invalid_cursor` (ora-01001):在非法游标上执行操作,如未打开游标即尝试提取数据。 7. `Invalid_number` (ora-01722):尝试将非法字符串转换为数字。 8. `No_data_found` (ora-01403):SELECT INTO 未返回任何...
6. **CURSOR_ALREADY_OPEN** (ORA-06511): 如果试图重新打开已经打开的游标,就会出现这个错误。确保在关闭游标后才能再次打开。 7. **DUP_VAL_ON_INDEX** (ORA-00001): 当在具有唯一约束的索引列上插入重复值时,...
- `ORA-6511 CURSOR-already-OPEN`:试图打开一个已处于打开状态的游标。 - `ORA-6530 Access-INTO-null`:试图为null对象的属性赋值。 - `ORA-6531 Collection-is-null`:试图将Exists以外的集合方法应用于一个null...
- **场景示例**:如果试图从未开启的游标中读取数据,或关闭一个未被打开的游标,将触发此异常。 #### 7. INVALID_NUMBER - **异常描述**:当SQL语句无法将字符串转换为数值时触发。 - **错误代码**:ORA-01722 - *...
`INVALID_CURSOR`(ORA-01001)异常会在试图使用无效的游标时发生,比如游标已经被关闭或者从未被正确打开过。 **解决方法:** 1. **确保游标正确打开**:在执行任何读取或写入操作前,确认游标是有效的且处于打开...
说明 : 指定在一个共享服务器环境中可同时运行的共享服务器进程的最大数量。 值范围: 根据操作系统而定。 默认值 : 20 dispatchers: 说明 : 为设置使用共享服务器的共享环境而设置调度程序的数量和类型。可以为该...