`
hlaijava
  • 浏览: 46642 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于ORACLE游标的问题(ORA-01000: maximum open cursors exce

阅读更多

昨天在开发过程中,经常碰到ORA-01000: maximum open cursors exceeded这个错误。一看报错,知道是游标超过最大数了,以前在做DB2开发的时候,也曾遇到过类似的问题。虽然解决了,但一直没弄清楚,JDBC是如何和数据库发生交互的?又是在什么时候打开数据库游标的?脑袋就跟浆糊一样,说来真是惭愧啊

昨天google了一把,终于解开一点迷惑了。

下面的片断转载于www.itpub.net

[TIP]关于Java开发中使用Oracle数据库的一点注意事项(原创)

很多朋友在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只需要设置一个比较小的值,就足够使用了,除非有非常特别的要求。

我昨天犯的错误就是把创建statement放到了循环之内,结果导致cursor猛增,到达了数据库设置的最大数。
虽然解决了问题,也清楚了游标是何时创建的,但还有几个问题比较迷糊。
1、通过查询,JDBC是将所有的查询结果一次性放到ResultSet中,还是一次只放一定数目的记录?例如,查询结果为2000条数据,JDBC是一次性将2000条数据放到结果集中,还是分批放置呢?

2、当通过ResultSet.next(),移动结果集指针时,此时是否还与数据库发生交互

分享到:
评论

相关推荐

    超出打开游标的最大数的原因和解决方案

    如果应用程序打开的游标数超过这个限制,会引发 ORA-01000: maximum open cursors exceeded 异常。下面将探讨超出打开游标的最大数的原因和解决方案。 原因 应用程序打开的游标数超过 OPEN_CURSORS 参数指定的最大...

    oracle+ora-各种常见java.sq

    - `java.sql.SQLException: ORA-01000: maximum open cursors exceeded`: 当打开的游标超过数据库允许的最大值时会出现此错误。检查代码中游标的关闭情况,避免资源泄漏。 8. **锁冲突** - `java.sql....

    oracle常见错误号

    1. ORA-01002:fetch out of sequence - 当游标没有正确地按照执行顺序进行操作时,比如在未调用`OPEN`、`FETCH`或`CLOSE`之前尝试`FETCH`,会出现这个错误。确保在执行`FETCH`前先调用`OPEN`。 2. ORA-00957:...

    oracle超出打开游标的最大数的原因和解决方案

    解决疑难问题,针对偏僻的问题:oracle超出打开游标的最大数的原因和解决方案,希望能对大家操作数据库有用处

    ORACLE技术文档\oracle cursor 游标.doc

    当一个应用程序尝试打开过多的游标时,可能会遇到`ORA-01000: maximum open cursors exceeded`错误,这表明单个用户尝试打开的游标数量超过了系统允许的最大值。 `ORA-01000`错误的主要原因通常是程序设计不当,...

    Oracle错误代码集合[归类].pdf

    Oracle错误代码是数据库系统在运行过程中遇到问题时给出的具体指示,帮助开发者和DBA诊断和解决故障。以下是一些常见的Oracle错误代码及其含义的详细解释: 1. ORA-17001: 这是一个内部错误,通常表示Oracle遇到了...

    Oracle游标使用案例大全

    Oracle游标是数据库编程中非常重要的一个概念,主要用于处理SQL查询的结果集。游标允许我们按行处理数据,逐条读取结果集,而不仅仅是一次性获取所有数据。在Oracle数据库中,游标对于复杂的事务处理、动态SQL以及...

    Oracle常用异常代码

    以上是关于Oracle数据库中常见的异常代码及其含义和解决方法的详细介绍。在开发过程中,了解这些异常对于提高程序的健壮性和可维护性非常重要。希望本文能帮助开发者更好地理解和处理Oracle中的异常情况。

    Oracle错误代码集合[参考].pdf

    12. ORA-17016, -17017, -17018: 这些错误与游标管理相关,包括超时、初始化问题和无效的游标状态。 13. ORA-17019: 只能描述查询,意味着只有查询语句可以被描述,非查询操作不适用。 14. ORA-17020: 无效的行预取...

    Oracle 游标使用大全

    这篇文档《Oracle 游标使用大全》应该涵盖了关于Oracle游标的各种使用方法和最佳实践。 1. **游标的定义与类型** - 游标(Cursor)是数据库系统中一个概念,用于跟踪查询结果集中的当前位置。 - Oracle游标有两种...

    Oracle数据库常见问题诊断-常见错误篇

    - **ORA-01000:** 当达到 `INIT.ORA` 文件中定义的最大打开游标数 (`OPEN_CURSORS`) 时,会出现此错误。 **解决办法:** - 增加 `INIT.ORA` 文件中的 `OPEN_CURSORS` 值,例如将其设为 200 或更高。 - 如果应用...

    Oracle错误码大全

    1. ORA-01000: 达到最大打开游标数 - 表示应用程序打开了过多的游标,超过了系统允许的最大值。解决方法是优化代码,关闭不再使用的游标,或者增加`OPEN_CURSORS`初始化参数的值。 2. ORA-01422: 指定的行数超出...

    oracle游标的总结oracle游标的总结

    Oracle 游标概述 Oracle 游标是 Oracle 数据库中的一种重要概念,用于查询数据库,获取记录集合(结果集)的指针。游标可以看作是一个临时表,你可以对其每一行的数据进行任意的操作。本文将对 Oracle 游标的概念、...

    oracle错误报告.docx

    在PL/SQL循环中尝试从游标中获取数据时出现了问题,可能是游标已经遍历完所有行,或者在FOR UPDATE的游标中提交了事务,或者在重新绑定占位符后没有重新执行SQL语句。根据具体情况调整代码。 17. ORA-01010: 无效的...

    oracle游标案例

    Oracle游标是数据库管理系统中的一种重要机制,它允许我们在处理大量数据时逐行进行操作,而不是一次性加载所有...通过理解这些知识点,你可以更好地利用"游标.sql"文件中的案例,学习和应用Oracle游标来解决实际问题。

    ORACLE 游标使用示例

    在"游标.txt"文件中,可能包含了更多关于Oracle游标的使用实例和技巧,包括游标的声明、动态游标、游标变量、游标表达式以及游标在存储过程和函数中的应用。这些内容可以帮助你更深入地理解和掌握Oracle游标,提高你...

    预定义异常

    4. **CURSOR_ALREADY_OPEN (ORA-06511)** - 描述:尝试打开一个已经打开的游标。 - 举例:在未关闭现有游标的情况下尝试重新打开它。 5. **DUP_VAL_ON_INDEX (ORA-00001)** - 描述:尝试在索引上插入重复值。 -...

    Oracle数据泵(Data Dump)使用过程当中经常会遇到一些奇奇怪怪的错误案例

    Oracle数据泵,也称为Data Pump,是Oracle数据库中用于高效数据迁移的重要工具。它通过高速导出和导入数据,提供了一种快速、可控制的数据迁移方式。然而,在实际使用过程中,用户经常遇到各种错误,这可能会影响...

    Oracle错误一览表

    在处理Oracle数据库时,遇到错误是在所难免的,了解并掌握常见的错误代码及其含义,对于快速定位问题、解决问题至关重要。本文将详细介绍部分Oracle错误代码的含义及可能的原因,帮助数据库管理员和开发人员更好地...

    oracle游标优化

    - `OPEN_CURSORS`:设置Oracle实例可以打开的最大游标数量。可以通过以下命令查看当前值: ``` SQL> SHOW PARAMETER OPEN_CURSORS; ``` - 如果需要增加这个值,可以使用以下命令: ``` SQL> ALTER SYSTEM SET...

Global site tag (gtag.js) - Google Analytics