< 返回新闻公告列表

java中如何实现ResultSet遍历取数据?租用日本多ip站群服务器租金多少钱?

发布时间:2021-12-1 10:34:10    来源: 纵横云

java中如何实现ResultSet遍历取数据?本文内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1、查找数据库中表的列名

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

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()会执行很长时间,还不是很清楚,但可以通过上述方式解决。至于为什么会有这个问题,有知道原因的朋友,请不吝赐教。

关于java中如何实现ResultSet遍历取数据就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

纵横云日本多ip站群服务器租用地址:https://www.zonghengcloud.com/zhanqun/riben.html

租用日本多ip站群服务器租金多少钱?纵横云日本多ip站群服务器配置推荐:

1、日本多ip站群服务器租用套餐一

CPU E3 1230

内存 16GB

硬盘 1T SATA

带宽 10M

IP数量 253个

IP段 1个整C段

机房 日本机房

价格 1799元一月

2、日本多ip站群服务器租用套餐二

CPU E5 2660v2

内存 16GB

硬盘 1T SATA

带宽 15M

IP数量 244个

IP段 4个C段(每个C段61个IP)

机房 日本机房

价格 1950元一月

3、日本多ip站群服务器租用套餐三

CPU E5 2660v2*2

内存 32GB

硬盘 1T SATA

带宽 20M

IP数量 244个

IP段 4个C段(每个C段61个IP)

机房 日本机房

价格 2200元一月

纵横云专业提供多ip站群服务器租用,包括日本多ip站群服务器租用、美国多ip站群服务器租用、韩国多ip站群服务器租用、南非多ip站群服务器租用、香港多ip站群服务器租用、台湾多ip站群服务器租用等,有需要的朋友可以咨询我们,官网:https://www.zonghengcloud.com/,QQ:3494196421,微信:19906048603。

19906048601
19906048601 19906048601
返回顶部
返回顶部 返回顶部