一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java中ResultSet遍歷數據操作

java中ResultSet遍歷數據操作

2020-08-16 00:02liuyunshengsir Java教程

這篇文章主要介紹了java中ResultSet遍歷數據操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

1.查找數據庫中表的列名

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<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.查找數據庫中表中每條記錄的列值

?
1
2
3
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代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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()來判斷下一條記錄不存在,而在代碼通過計數來實現:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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()也會執行很長時間:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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遍歷數據操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/liuyunshengsir/article/details/50618494

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青操在线 | 天天做天天爱天天爽综合网 | 国产成人亚洲精品91专区高清 | 免费视频精品一区二区 | 成人影院在线观看视频 | 日本免费三片在线播放 | 国产小视频免费看 | 日本wwxx护士 | 黄 色 大 片 网站 | 久久综合给合久久狠狠狠… | 亚洲精品久久玖玖玖玖 | wc凹凸撒尿间谍女厕hd | 高级黄色片 | 超级乱淫变态伦短篇小说全集 | 九九精品免视频国产成人 | 国语刺激对白勾搭视频在线观看 | 国产suv精品 | 亚州男人天堂 | a片毛片在线免费看 | 动漫美女人物被黄漫小说 | 女人把扒开给男人爽的 | 精品无码一区二区三区中文字幕 | 精品视频在线播放 | 99在线观看视频 | 水多多凹凸福利视频导航 | 亚洲成人一区二区 | 成人区精品一区二区毛片不卡 | 奇米影视99| 成人免费在线视频 | 2019天天干天天操 | 日本玖玖视频 | 女人张开腿让男人桶视频免费大全 | 精品国产一区二区三区在线观看 | 精品伊人| 精品无码国产污污污免费网站2 | 日韩高清一区 | 国产麻豆在线观看网站 | 精品久久久久香蕉网 | 亚洲区在线播放 | 从后面撕开老师的丝袜动态图 | 日本噜噜影院 |