java中如何实现ResultSet遍历取数据?租用日本多ip站群服务器租金多少钱?
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。