正常情况下MySQL的JDBC是不支持setFetchSize()方法设置的,总是一次性全部抓取到内存中,导致内存溢出。可以通过分页抓取以降低内存开销,过多的分页会导致查询效率降低。当然,程序也会变得更加复杂。
为了能够使JDBC自动以流的方式进行数据抓取,可以按如下设置:
statement.setFetchSize(Integer.MIN_VALUE);
有人认为是MySQL的一个BUG,详情见:http://bugs.mysql.com/bug.php?id=18148
另外,按文章提到,可以尝试在JDBC的URL上加上参数"useCursorFetch=true"。如此,可以按setFetchSize指定的数量批量抓取数据,只支持MySQL 5.0 以上的Server/Connector。推荐以此方式解决这个问题。
相关推荐
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "username", "password"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM ...
同时,通过使用Statement的setFetchSize()方法,开发者可以实现数据的分页,提高应用性能。 JDBC2还引入了**存储过程的支持(Support for Stored Procedures)**。开发者可以调用数据库中的存储过程,获取返回值,...
在描述中提到的"打成包了,找了好久才找到的"可能指的是这个驱动程序的压缩包,其中包含的"mysqljdbc"可能是这个JAR文件的名称或者是包含该文件的目录。 使用MySQL驱动程序的步骤通常包括以下几点: 1. **添加驱动...
- MySQL 的 URL 形式为:`jdbc:mysql://<主机名>:<端口号>/<实例名>` #### 四、访问数据库的一般过程 访问数据库的过程通常遵循以下步骤: 1. **加载驱动类**:通过 `Class.forName` 加载数据库驱动类。 2. **...
此外,如果你的应用程序是基于Java的,还可以使用JDBC的`Statement`对象的`setFetchSize()`方法来控制每次从数据库获取的数据量,减少不必要的网络传输,提高效率。同时,合理使用`PreparedStatement`而非`Statement...
另一种方法是使用原生SQL查询,这样可以直接控制SQL语句的生成,包括使用LIMIT和OFFSET关键字(对于MySQL等数据库)或ROW_NUMBER()函数(对于SQL Server)来实现分页。这同样可以绕过Hibernate的默认只进结果集行为...
本文将深入探讨JDBC在SQL Server、Oracle、Access和MySQL这四种常见数据库中的分页技术。 1. **SQL Server的分页** SQL Server支持`TOP`和`OFFSET-FETCH`子句进行分页。例如,获取第5页(每页10条)的数据: ```...
13. **hibernate.jdbc.fetch_size**: 设置JDBC抓取(fetch)大小,非零值,通过`Statement.setFetchSize()`控制。 14. **hibernate.jdbc.batch_size**: 用于启用JDBC2批量更新,建议值在5到30之间。 15. **...
- Oracle的JDBC驱动默认不会缓存所有数据,因此在Oracle中设置`setFetchSize`可能影响不大。 - MySQL则不同,需要在连接字符串中添加`useCursorFetch=true`参数,并设置`defaultFetchSize`来控制游标大小。在MySQL...
- **描述**:非零值,用于指定 JDBC 抓取数量的大小(调用 `Statement.setFetchSize()`)。 - **取值**:整数值。 - **示例**:`hibernate.jdbc.fetch_size=50` ##### 2. JDBC 批量大小 (Batch Size) - **名称**:...
例如,对于MySQL,我们会写`Class.forName("com.mysql.jdbc.Driver")`。这使得Java应用程序能够识别并使用相应的数据库驱动,从而能够与数据库通信。 接下来,我们关注主要接口的使用: 1. **DriverManager类**: ...
- JDBC提供了一种基本的分页方式,通过设置Statement或PreparedStatement的`setFetchSize()`方法来控制每次从数据库获取的记录数,但这并不保证实际的分页效果,因为这取决于数据库驱动的实现。 - 使用`ResultSet....
Oracle的JDBC驱动默认就不会将数据缓存在Java内存中,所以设置游标大小对Oracle可能无影响。而对于MySQL,需要确保使用5.0以上版本,并在连接参数中添加useCursorFetch=true和defaultFetchSize=XXX,以启用游标方式...
2. **JDBC分页**:使用Java Database Connectivity (JDBC) 直接操作数据库时,可以通过设置`Statement`或`PreparedStatement`的`setFetchSize()`方法来控制每次获取的结果数量,但这种方式并不提供真正的分页,只是...
- **JDBC**:在Java中,可以通过设置Statement或PreparedStatement的`setFetchSize()`方法来实现类似分页的效果,但这并不完全等同于数据库级别的分页。 - **MyBatis**:MyBatis提供了基于SQL的分页方式,可以在...
例如,我们可以使用Java的JDBC API配合Statement或PreparedStatement对象的`setFetchSize()`方法来设置每次从数据库获取的数据量。 以下是一个基本的分页查询示例: ```java Connection conn = DriverManager.get...
2. 使用JDBC API:通过设置Statement的`setFetchSize()`方法来控制每次查询的数据量,但这并不等同于真正的分页,只是在结果集上做了一次内存级别的分页,对大数据量可能导致内存溢出。 3. ORM框架支持:例如...
这个方法需要数据库的URL、用户名和密码作为参数,URL的格式遵循jdbc协议,例如`jdbc:mysql://localhost:3306/mydatabase`,其中`mysql`代表数据库类型,`localhost:3306`是服务器地址和端口,`mydatabase`是数据库...