JDBC用ResultSet访问大量数据时会遇到的问题

我们经常需要JDBC来对数据库就行操作,一般流程为连接数据库、通过sql语句把需要的数据取出来保存到ResultSet,然后调用ResultSet方法的类似 getString,getInt()等方法来取出ResultSet中的数据。当数据量比较小的时候,这种访问方式可以正常运行。但是当数据量很大的时候,在对ResultSet中的部分数据完成访问后会抛出异常(JDBC游标超过限制出现ORA-01000)。

出现该问题的可能原因如下:

1、java代码在执行createStatement和prepareStatement的时候,实际上都是相当与数据库中打开了一个cursor,尤其是如果createStatement和prepareStatement在循环内部的话,一直使用不关闭非常容易出错。

2、使用getString函数的运行方式:程序会一次性把数据都放到内存里,然后通过调用ResultSet的nexhe getString等方法取数据,当数据量太大导致内存放不下的时候这种方式就会报错。因此可以改用getObject方法来访问ResultSet,然后把访问到的Object再转换成指定的类型(getObject的运行模式:数据不一次性全部读入内存,而是存在与数据库中,每次调用getObject都是直接从数据库中取数据,因此可以正常运行)。

时间: 2024-12-28 00:09:09

JDBC用ResultSet访问大量数据时会遇到的问题的相关文章

是用JDBC从数据库中获取数据并以java对象返回

/** * * @param c * for example Person.class * @param primaryKeys * primaryKeys为主键,参数顺序和表中保持一致 如果id, name 为主键 类名为Person 则 getEntity(Person.class,1,"name") * @return */ public static Object getEntity(Class c, Object... primaryKeys) { PreparedState

SEO教程——SEO的主动访问用户数据

对于SEO来说,最终目的是为了用户能主动访问你的网页,而技巧和手段都知识过渡.今天的SEO教程我们就来讨论一下什么是SEO的主动访问用户数据,又有什么意义. 1.搜索引擎在对站点进行评级时会考虑到主动访问用户数据 2.主动访问用户数据可以帮助搜索引擎正确认识一个站点. 大家都知道搜索引擎喜欢原创内容占比高的网站,对于站外重复度较高的网站持谨慎观望的态度.有些网站没有原创能力,却可以通过编辑网络上的信息把一个主题内容做大做全,从而HOLD住大批目标用户,主动访问用户能够达到一定比例.对于这样的非原

SpringBoot实战(四)之使用JDBC和Spring访问数据库

这里演示的是h2databse示例,所以简单的介绍普及下h2database相关知识 H2数据库是一个开源的关系型数据库. H2是一个嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容.它还提供兼容模式,可以兼容一些主流的数据库,因此采用H2作为开发期的数据库非常方便. H2数据库特点: 短小精干. Java编写,可使用GCJ和IKVM.NET编译. 同时支持网络版和嵌入式版本,另外还提供了内存版. 有比较好的兼容性,支持相当

[SpingBoot guides系列翻译]通过JDBC和Spring访问关系数据库

原文 参考链接 hikaricp Spring Boot JDBC Starter Spring Boot Starter Parent h2 database introduction Autowired 目的 通过JDBC和Spring去访问关系型数据库. 你将构建的项目 你将构建一个通过Sping的JdbcTemplate 去访问关系型数据库的项目. 你需要的 大约15min 喜欢的编辑器或IDE jdk1.8+ Gradle4+ 或 Maven3.2+ 如何完成 跟着教程演示使用Mave

salesforce 零基础学习(三十三)通过REST方式访问外部数据以及JAVA通过rest方式访问salesforce

本篇参考Trail教程: https://developer.salesforce.com/trailhead/force_com_dev_intermediate/apex_integration_services/apex_integration_rest_callouts 有的时候我们需要在salesforce中引入外部的方法或者数据,这样就需要访问外部的Services,目前常用的访问方式有两种: 1.SOAP方式:Web Service通过XML方式调用SOAP Web服务器; 2.R

django之创建第4-3个项目-访问list数据

1.index <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>django之创建第4-2个项目</title> </head> <body> <h2>访问list数据,用索引获取list内的数:{{test.0}}</h2> <!--模板 变量用变量

改善 C# 的语言习惯(一) - 使用属性而不是可访问的数据成员(整理中)

改善 C# 的语言习惯(一) - 使用属性而不是可访问的数据成员 序 为什么我们的程序运行得棒棒的,还要改呢?Why? 答:我们要让程序运行得更快,执行的效率更高,代码的可读性更强,维护的成本更低... .... 我们知道,守旧主义并不适用于计算机行业. 在这里,我会告诉你已经弃用或者应该弃用的东西,并告诉你推荐的用法,以及弃用的原因和推荐使用的原因.

Linux下访问光盘数据

实验01:访问光盘数据 实验目标 熟练linux光盘的安装 访问光盘的数据 实验步骤 [[email protected] ~]# umount /dev/cdrom [[email protected] ~]# ls /media/ [[email protected]~]# 二.手动挂载 1.指定光盘安装位置 [[email protected]~]# mount /dev/cdrom /media/ mount:block device /dev/cdrom is write-protec

LINUX访问光盘数据

实验01:访问光盘数据 实验目标 熟练linux光盘的安装 访问光盘的数据 实验步骤 [[email protected] ~]# umount /dev/cdrom [[email protected] ~]# ls /media/ [[email protected]~]# 二.手动挂载 1.指定光盘安装位置 [[email protected]~]# mount /dev/cdrom /media/ mount:block device /dev/cdrom is write-protec