我使用带有JDBC的Oracle数据库并在连接上执行INSERT。对于每个插入,我创建一个新的Statement
。
经过多次插入(> 1000)后,出现错误ORA-01000
,这意味着Oracle有插入的打开游标。我知道,我还没有结束这些陈述。如果我关闭它们,一切顺利。
问题是,为什么Oracle会为插入操作创建游标?
当我执行SELECT
时,Oracle会返回ResultSet
。我试图关闭结果集但不是基础语句。在这种情况下(没有插入),问题永远不会发生。
答案 0 :(得分:1)
Oracle中的每个语句都是一个游标。 Oracle中的游标旨在被客户端重用。如果客户端不再使用游标,则客户端负责关闭游标。
在java中,你几乎总是使用PreparedStatement
。忘记常规Statement
,几乎没有理由使用它们。
使用PreparedStatement
解析一次并执行任意数量的时间:
或者,如果您想限制数据库往返,您可以:
答案 1 :(得分:0)
您应该始终关闭不再使用的数据库资源,并在打开时重复使用这些资源 其他任何东西最终都会导致资源耗尽数据库,结果造成了丑陋的崩溃。