碰到一个jdbc游标超出最大数的异常。正好对Oracle与jdbc关系做了进步了解。记录下以便日后查阅,有错误之处,欢迎大家指出。
Oralce游标分为显示游标和隐式游标两种:
两种游标都会在v$open_cursor中体现出来。
但是两种游标是由区别的:
隐式游标大部分创建是通过存储过程来的,例如在存储过程中Select 一个查询,就会打开一个隐式游标,这时在Open_cusor中会有纪录。而这种游标不会随着CallableStatement对象的关闭而关闭。他会 一直停留在高速缓存中。这也是为什么存储过程执行起来要快很多的原因之一。只有当打开的游标数大于你所设定的打开的最大游标数时才会按照一定的算法吧高速 缓存中的隐式游标关闭调。最大游标数设定是在系统参数中设定的。oracle8i缺省每个连接为300个。这样的游标只会提高行能而不会降低性能。
显示的游标就更好解释了,例如你用JDBC创建一个statement,preparestatement,执行一些查询语句,每执行一个查询就会 打开一个显示游标。关闭Statement就会关闭这些游标,如果你没有关闭,那么显示游标数将会增加,当打开的游标数大于最大游标数时就会检查有没有隐 士游标,如果有则剔除掉让给显示游标。当显示游标的最大数目超过最大值时则汇报错:超出最大允许打开游标数的错误。 所以只要你保证所有的Statement都关闭了就不会有问题。
同时系统将结束此次会话,释放所有的cursor。JDBC标准规定了在释放连接的时候必须statement.close....
注意: 对于使用连接池技术,只是将连接返回到连接池。如果没有返回连接的时候关闭statement,resultset资源,会导致游标超出最大数
Exception : java.sql.SQLException: ORA-01000: maximum open cursors exceeded
1. getConnection相当于打开一个数据库session,
查看session 语句:
SELECT * FROm v$open_cursor cur WHERE cur.USER_NAME = 'QRTZ';
2. statement,prepareStatement,callableStatement 获取一个游标,此时并不会在v$open_cursor 里出现,execute之后才打开一个cursor,这时候在v$opent_cursor可以查询的到。
select COUNT(*) from v$open_cursor o where o.USER_name = 'QRTZ' order by o.LAST_SQL_ACTIVE_TIME desc
3. 查看每个连接的最大游标数
show parameter session_cached_cursors;
4. 查看session缓存的最大游标数
show parameter session_cached_cursors;
ojdbc14.jar(oracle10.2) 测试结果:
循环执行相同的语句,只会使用一个cursor,并不会产生新cursor循环执行不同的语句, 会有多个cursor产生。
相关推荐
以上只是对Oracle游标使用的一个简要概述,具体到《Oracle 游标使用大全》这份文档,可能会包含更详尽的示例、技巧和案例,帮助开发者更好地理解和运用Oracle游标。通过学习和实践,我们可以提升数据库操作的效率和...
总之,Oracle JDBC驱动包,特别是ojdbc6版本,对于Java开发者来说是连接和操作Oracle数据库不可或缺的一部分,它提供了丰富的功能和灵活性,适应各种开发场景。了解和掌握其使用方法和最佳实践,对于提升Java应用与...
Oracle12C JDBC驱动还支持高级特性,如分布式事务处理、批量操作、预编译的SQL语句、游标、存储过程调用、连接池管理等。此外,通过`oracle.jdbc.pool.OracleDataSource` 类可以实现连接池功能,如使用Oracle的...
Oracle 12c JDBC驱动包是Oracle数据库与Java应用程序之间的桥梁,它允许Java开发者通过编写Java代码来访问和操作Oracle数据库。在Java编程环境中,JDBC(Java Database Connectivity)是标准API,用于连接各种类型的...
Oracle 12C JDBC驱动包是Oracle数据库与Java应用程序之间的桥梁,它允许Java开发者通过编写Java代码来访问和操作Oracle数据库。JDBC(Java Database Connectivity)是Java平台的标准API,用于连接各种数据库,包括...
此外,Oracle JDBC驱动还支持高级特性,如分布式事务、存储过程调用、批处理和JDBC游标等。 Oracle Instant Client的`instantclient_11_2`版本适用于Oracle 11g Release 2数据库。下载后,需要将其路径添加到系统的...
Oracle游标是数据库管理系统中的一种重要工具,用于处理和遍历查询结果集。在Oracle数据库中,游标允许用户在PL/SQL程序中逐行处理数据,而不是一次性加载所有数据。这在处理大量数据时非常有用,因为它可以提高性能...
总结一下,Java调用Oracle存储过程并处理游标的关键步骤包括: 1. 创建Oracle存储过程,包含一个或多个OUT参数,这些参数为游标。 2. 在Java中,使用`CallableStatement`调用存储过程,注册OUT参数为`OracleTypes....
Oracle 11g JDBC API Reference 是Oracle公司为Java开发者提供的一份详细文档,它涵盖了在Oracle 11g数据库环境中使用JDBC(Java Database Connectivity)技术进行数据访问和操作的相关接口、类和方法。这份文档是...
Oracle JDBC还支持高级特性,如批量更新、预编译的`PreparedStatement`、存储过程调用、游标处理、事务控制等。对于大型企业级应用,理解并熟练使用这些特性是至关重要的。 在开发过程中,注意管理和优化JDBC连接,...
8. **游标**: Oracle JDBC支持游标,允许应用程序一次处理结果集中的一行数据,从而处理大量数据时不会耗尽内存。 9. **性能优化**: Oracle JDBC驱动支持特性如 PreparedStatement 缓存、并行执行、批量绑定等,以...
这个压缩包"Oracle的jdbc8jar及版本说明.zip"包含了ojdbc8.jar文件以及一个名为"jar包具体说明.txt"的文本文件,方便开发者了解和使用。 ojdbc8.jar是Oracle Database 12c Release 2(12.2.0.1)的JDBC Type 4驱动...
Oracle数据库的JDBC驱动是Java开发者连接Oracle数据库的重要组件,它允许Java应用程序通过标准的Java Database Connectivity (JDBC) API来访问和操作Oracle数据库。在本主题中,我们将深入探讨Oracle 10g数据库的...
总的来说,Java调用Oracle存储过程并通过游标返回临时表是一种常见的数据处理方式,它结合了数据库的强大功能和Java的灵活性,为复杂业务场景提供了高效解决方案。在处理大量数据时,正确地管理和使用游标至关重要,...
其中,手册的主要内容包括JDBC的基本概念、Oracle8i JDBC驱动程序的使用、JDBC API的详细介绍、异常处理、事务处理、结果集处理、游标处理、LOB处理、SQL和PL/SQL语句的使用等等。 在手册中,作者还提供了许多实用...
此外,Oracle JDBC驱动还支持高级特性,如存储过程调用、游标处理、分布式事务等。开发者可以根据需求选择合适的JDBC方法进行数据库操作。 总之,Oracle数据库的JDBC连接和jar包是Java开发人员与Oracle数据库交互的...
除了基本的数据库连接和SQL执行,Oracle JDBC驱动还提供了高级功能,如批量更新、游标、事务控制、连接池等。同时,Oracle JDBC驱动还支持Oracle特有的特性,如PL/SQL存储过程调用、LOB处理、分布式事务等。 总的来...
- `OracleResultSet`:Oracle特定的`ResultSet`实现,处理Oracle查询结果的特性,如ROWID和游标。 通过研究这些源码,开发者可以了解: - 如何实现JDBC驱动的注册和加载机制。 - 数据库连接的建立和关闭流程。 - ...
此外,Oracle JDBC驱动还支持高级特性,如存储过程调用、批处理、游标、分布式事务等。在实际开发中,可以根据项目需求选择合适的JDBC功能来优化性能和提升代码质量。 在部署Java应用时,通常会将Oracle JDBC驱动的...
它包含了Oracle JDBC Driver的所有功能,包括对PL/SQL过程的支持,以及高级特性如Oracle Advanced Queuing (AQ) 和流处理。 2. ojdbc5.jar:此驱动文件是针对Java SE 5的,因此如果你的开发环境或者应用服务器还在...