java中ResultSet遍历数据操作
作者:liuyunshengsir 发布时间:2022-06-13 05:02:13
标签:java,ResultSet,遍历,数据
1.查找数据库中表的列名
<pre name="code" class="html">String sql = "select *from tblmetadatainfo";
ResultSet rs = MySqlHelper.executeQuery(sql, null);
String str="";
try {
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i < rsmd.getColumnCount(); i++) {
str+=rsmd.getColumnName(i)+",";
}
str=str.substring(0, str.length()-1);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
2.查找数据库中表中每条记录的列值
for(int i=1;i<rs.getMetaData().getColumnCount();i++){
str+=rs.getString(i)+",";
}
补充知识:Java:使用ResultSet.next()执行含有rownum的SQL语句速度缓慢
在使用Oracle数据库进行分页查询时,经常会用到如下SQL:
select tm.* from (select rownum rm, t.* xmlrecord from testtable t) tm where tm.rm > ? and tm.rm <= ?
使用的java代码如下:
int startIdx = 0;
int endIdx = 10000;
String sql = "select tm.* from (select rownum rm, t.* xmlrecord from testtable t) tm where tm.rm > ? and tm.rm <= ?";
try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql);) {
ps.setInt(1, startIdx);
ps.setInt(2, endIdx);
try (ResultSet rs = ps.executeQuery();) {
while (rs.next()) {
String id = rs.getString(2);
System.out.println("id="+id);
}
}
}
当使用以上代码时,会发现当取完最后一条记录后,再执行rs.next()时,本来希望返回false后跳出循环,但rs.next()会执行非常长的时间。解决的方法是不让rs.next()来判断下一条记录不存在,而在代码通过计数来实现:
int startIdx = 0;
int endIdx = 10000;
int i = 0;
int count = endIdx - startIdx;
String sql = "select tm.* from (select rownum rm, t.* xmlrecord from testtable t) tm where tm.rm > ? and tm.rm <= ?";
try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql);) {
ps.setInt(1, startIdx);
ps.setInt(2, endIdx);
try (ResultSet rs = ps.executeQuery();) {
while (rs.next()) {
i++;
String id = rs.getString(2);
System.out.println("id="+id);
if(i == count) {
break;
}
}
}
}
如果代码中设置了fetchSize,并且fetchSize不能被count整除时,在取最后一片数据时,rs.next()也会执行很长时间:
int startIdx = 0;
int endIdx = 10000;
String sql = "select tm.* from (select rownum rm, t.* xmlrecord from testtable t) tm where tm.rm > ? and tm.rm <= ?";
try (Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql);) {
ps.setFetchSize(300);
ps.setInt(1, startIdx);
ps.setInt(2, endIdx);
try (ResultSet rs = ps.executeQuery();) {
while (rs.next()) {
String id = rs.getString(2);
System.out.println("id="+id);
}
}
}
以上代码中,当取得9900条数据后,再取下一个300条时,rs.next()就会执行很长时间,可能是由于取不到一个完整的300条记录造成的。解决方法是将fetchSize设置成能被count整除的数字,比如:
ps.setFetchSize(500);
在以上两种状况下,为什么rs.next()会执行很长时间,还不是很清楚,但可以通过上述方式解决。至于为什么会有这个问题,有知道原因的朋友,请不吝赐教。
来源:https://blog.csdn.net/liuyunshengsir/article/details/50618494


猜你喜欢
- 日期、数字格式化显示,是web开发中的常见需求,spring mvc采用XXXFormatter来处理,先看一个最基本的单元测试:packa
- SpringBoot项目当中支持的三类配置文件:application.propertiesapplication.ymlapplicati
- Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架。 Struts2不只是Struts1下一个版本,它是一个完全重写的Str
- 背景:由于所在办公室网络限制,笔者每天都使用网络都要先连接无线网。如下图,输入授权用户信息登录后才能使用WIFI。丧心病狂的是该网页Cook
- 主要介绍使用MediaPlayer播放音频的方式。关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPlay
- 本文实例为大家分享了Android实现可折叠式标题栏的具体代码,供大家参考,具体内容如下先看效果图:一、实现步骤:1、布局文件<?xm
- 目录概要独立文件专属文件internal storageexternal storage概要当我们查看手机的文件管理器的时候,会发现里面的文
- 一般在实际项目的开发中,会要求涉及日志记录的问题,比较常用的有Log4Net,NLog等几个,而小项目小工具的话,则无需费此大驾。而譬如串口
- 面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。在面向对象程序设计(OOP)中,不必关心对象的具体实现。
- Android package属性、package name和Application ID三者的联系及区别package属性:在Androi
- 本文为大家分享了C#基于Socket套接字的网络通信封装代码,供大家参考,具体内容如下摘要之所以要进行Socket套接字通信库封装,主要是直
- 工作中因业务需求,将数据库中的树状结构的数据根据父节点获取所有的子节点实现思路1.获取整个数据的list集合数据2.将数据分组,java8
- 本文实例为大家分享了C#实现PC蓝牙通信代码,供大家参考,具体内容如下添加引用InTheHand.Net.Personal.dll首先创建一
- 笔者今年做了一个和人脸有关的android产品,主要是获取摄像头返回的预览数据流,判断该数据流是否包含了人脸,有人脸时显示摄像头预览框,无人
- C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。
- 早期的项目比较简单,多是用JSP 、Servlet + JDBC 直接搞定,后来使用 Struts1(Struts2)+Spring+Hib
- 1. 简介Jpa 是一套ORM 的规范hibernate 不就是一个 ORM 框架也提供了对于 JPA 的实现JPA(Java Persis
- 介绍本篇主要介绍kafka的 * 和序列化器,序列化器是和数据在网络中的传输有关,数据在网络中的传输为字节流,所以生产者在发送时需要将其序列
- 编写C#程序的时候,我们都遇到过配置文件,而如今绝大多数的配置文件都是用XML写的。所以在处理的时候就需要操作XML文件。那么C#如何操作X
- 调取钉钉考勤接口的功能公司需要做一个钉钉考勤的页面,让我去写这个功能。结果却比我想象的要麻烦一些!具体是怎么个麻烦呢下面直入正题首先我们找到