我得到了ORA-0300:超出了最大打开游标数
public void connectionexample(String email)
{
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = db.getConnection();
ps = conn.prepareStatement(select_query);
ps.setString(1, email);
rs = ps.executeQuery();
if(rs.next()) {
ps = conn.prepareStatement(update_query);
ps.setString(1, email);
ps.executeUpdate();
} else {
ps = conn.prepareStatement(insert_query);
ps.setString(1, email);
ps.executeUpdate();
}
} catch(Exception e) {
LOG.error("Exception occured ", e);
} finally {
DATABASE.release(rs);
DATABASE.release(ps);
DATABASE.release(conn);
}
}
您正在使用准备好的语句ps
:
public void connectionexample(String email)
{
Connection conn = null;
PreparedStatement ps = null;
PreparedStatement ps2 = null; -- Use another variable for the second prepared statement
ResultSet rs = null;
try {
conn = db.getConnection();
ps = conn.prepareStatement(select_query);
ps.setString(1, email);
rs = ps.executeQuery();
if(rs.next()) {
ps2 = conn.prepareStatement(update_query); -- Assign this to the second variable
} else {
ps2 = conn.prepareStatement(insert_query);
}
ps2.setString(1, email);
ps2.executeUpdate();
} catch(Exception e) {
LOG.error("Exception occured ", e);
} finally {
DATABASE.release(rs);
DATABASE.release(ps);
DATABASE.release(ps2); -- Make sure you also close the second prepared statement
DATABASE.release(conn);
}
}
但是,通过使用SQLMERGE
语句,可以避免第二次往返数据库。
您会得到这个错误,因为您多次使用相同的PrePapred语句:
ps = conn.prepareStatement(select_query);//<<----------------------Here
...
if (rs.next()) {
ps = conn.prepareStatement(update_query);//<<-------------------Then here
...
} else {
ps = conn.prepareStatement(insert_query);//<<-------------------or here
...
}
为了解决问题,您必须关闭语句并为新查询创建一个新语句,或者为了更好的方式,在不同的方法中分离操作,每个方法创建并释放其语句和连接。
我得到一个ORA-01000 SQL异常。所以我有一些与之相关的疑问。 编辑1:6。使用弱/软引用语句对象是否有助于防止泄漏? 编辑2:1。有没有办法,我可以找到我的项目中所有缺失的“statement.close()”?我知道这不是内存泄漏。但是我需要找到一个符合垃圾收集条件的语句引用(在那里没有执行close())?有工具吗?还是我必须手动分析? 请帮我理解一下。
我已经连接了Oracle数据库。现在我要面对 我使用代码插入数据: 它只适用于前500条记录,然后我有错误Ora-1000。我总共有大约6000条记录。我发现一些主题说应该改变配置,但我不能改变配置。 有没有其他方法可以解决这个错误?
问题内容: 我收到了ORA-01000 SQL异常。因此,我对此有一些疑问。 最大打开游标是否与JDBC连接的数量完全相关,还是与我们为单个连接创建的语句和结果集对象相关?(我们正在使用连接池) 有没有一种方法可以配置数据库中的语句/结果集对象的数量(如连接)? 是否建议在单线程环境中使用实例变量statement / resultset对象而不是方法local statement / resul
在Eclipse中,我遇到了这个错误:*错误ORA-01000:超过了最大打开游标数,我已经在块中关闭了连接,但我不知道为什么会出现这个错误,这是我的JAVA代码。请帮帮我!
我们的应用程序连接到Oracle数据库,我们使用Spring提供的JDBCTemboard与数据库交互。根据Spring JDBCTemboard的留档,它确保它将关闭所有连接和游标。但显然我们得到了以下打开游标的异常。 ORA-01000:组织上超过了最大打开游标数。springframework。jdbc。支持AbstractFallbackSQLExceptionTranslator。在or