不少狀況咱們使用ResultSet 就會由於這樣那樣的問題,rs被關閉或數據連接被關閉,致使ResultSet不能使用。其實這個問題咱們能夠用CachedRowSetImpl來解決。個人理解是這是一個結果的緩存類,保存在其中的數據不會隨着數據庫和ResultSet的鏈接的關閉而丟失,能夠傳遞。java
使用方法以下:mysql
1 package com.ifly.myhome.test; 2 import java.sql.*; 3 import com.sun.rowset.CachedRowSetImpl; 4 public class test { 5 private static Connection con; 6 private static String user = "kh"; 7 private static String password = "kh"; 8 private static String className = "com.mysql.jdbc.Driver"; 9 private static String url = "jdbc:mysql://localhost:3306/student"; 10 public static void main(String[] args) { 11 try { 12 Class.forName(className); 13 con = DriverManager.getConnection(url, user, password); 14 String sql="select * from student"; 15 PreparedStatement pstm=con.prepareStatement(sql); 16 pstm.execute(); 17 ResultSet rs=pstm.getResultSet(); 18 CachedRowSetImpl rowset=new CachedRowSetImpl(); 19 rowset.populate(rs); 20 rs.close(); 21 pstm.close(); 22 con.close(); 23 while (rowset.next()) { 24 System.out.println("id:"+rowset.getString("id")); 25 26 } 27 28 } catch (Exception e) { 29 // TODO Auto-generated catch block 30 e.printStackTrace(); 31 } 32 }
從上面的例子能夠看出,數據庫和ResultSet的鏈接都已經關閉了,並且仍然能夠進行數據循環出值來。使用方法也很簡單(紅色字體所示)sql