为什么Oracle通过JDBC插入打开游标?

时间:2013-05-30 12:24:50

标签: oracle jdbc insert cursor odbc

我使用带有JDBC的Oracle数据库并在连接上执行INSERT。对于每个插入,我创建一个新的Statement

经过多次插入(> 1000)后,出现错误ORA-01000,这意味着Oracle有插入的打开游标。我知道,我还没有结束这些陈述。如果我关闭它们,一切顺利。

问题是,为什么Oracle会为插入操作创建游标?

当我执行SELECT时,Oracle会返回ResultSet。我试图关闭结果集但不是基础语句。在这种情况下(没有插入),问题永远不会发生。

2 个答案:

答案 0 :(得分:1)

Oracle中的每个语句都是一个游标。 Oracle中的游标旨在被客户端重用。如果客户端不再使用游标,则客户端负责关闭游标。

在java中,你几乎总是使用PreparedStatement。忘记常规Statement,几乎没有理由使用它们。

使用PreparedStatement解析一次并执行任意数量的时间:

  1. prepareStatement
  2. bind与变量一样多次
  3. execute
  4. 重复2-3直到完成,然后关闭。
  5. 或者,如果您想限制数据库往返,您可以:

    1. prepareStatement
    2. bind与变量一样多次
    3. addBatch
    4. 重复2-3直到完成,然后executeBatch
    5. 关闭光标

答案 1 :(得分:0)

您应该始终关闭不再使用的数据库资源,并在打开时重复使用这些资源 其他任何东西最终都会导致资源耗尽数据库,结果造成了丑陋的崩溃。