java資料庫程式設計(10) 離線RowSet
阿新 • • 發佈:2018-12-02
- 使用離線的RowSet可以使得不用一直保持Connection連結,離線RowSet會直接將地城資料讀入到記憶體,封裝成RowSet物件,而RowSet物件可以直接當作Java Bean來使用
- CachedRowSet是所有離線RowSet的父介面
- 程式執行前和程式執行後對資料庫進行查詢的結果如下
-
import javax.sql.rowset.CachedRowSet; import javax.sql.rowset.RowSetFactory; import javax.sql.rowset.RowSetProvider; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Properties; public class CachedRowSetTest { // 常規操作,不解釋~~ private static String driver; private static String url; private static String user; private static String pass; public void initParam(String fileName) throws Exception{ Properties prop = new Properties(); prop.load(new FileInputStream(fileName)); driver = prop.getProperty("driver"); url = prop.getProperty("url"); user = prop.getProperty("user"); pass = prop.getProperty("pass"); } public CachedRowSet query(String sql) throws Exception{ Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, pass); Statement stmtm = conn.createStatement(); ResultSet rs = stmtm.executeQuery(sql); RowSetFactory factory = RowSetProvider.newFactory(); // 建立RowSetFactory物件 CachedRowSet cachedRowSet = factory.createCachedRowSet(); // 通過RowSetFactory物件創捷CacheRowSet物件 cachedRowSet.populate(rs); // 將查詢的結果集封裝到CachedRowSet中 // 關閉連線 rs.close(); stmtm.close(); conn.close(); return cachedRowSet; // 將封裝有結果集的CachedRowSet返回 } public static void main(String args[]) throws Exception{ CachedRowSetTest ct = new CachedRowSetTest(); ct.initParam("mysql.ini"); CachedRowSet rs = ct.query("select * from students"); rs.afterLast(); // 對離線RowSet進行一些處理 while (rs.previous()){ System.out.println(rs.getString(1) + "\t" + rs.getString(2)); if(rs.getString("Sname").equals("Smith")){ rs.updateString("Sno", "S4"); rs.updateRow(); } } // 重新開啟資料庫連結,並且將修改過的結果集同步到資料庫中 Connection conn = DriverManager.getConnection(url,user,pass); conn.setAutoCommit(false); rs.acceptChanges(conn); } } //執行程式,看到以下輸出結果 // S3 Tom // S2 Marry // S0 Smith