日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDBC中使用RowSet包装结果集

發布時間:2025/3/11 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDBC中使用RowSet包装结果集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

C#中有了DataSet,可以把底層數據讀取到內存中進行離線操作。操作完成再同步到底層數據源。Java中也提供了類似的功能——RowSet。

和ResultSet相比,RowSet默認是可以滾動、可更新、可序列化的結果集合,而且作為Javabean使用。并支持離線操作,降低了數據庫的負載。

RowSetProvider負責創建RowSetFactory,而RowSetFactory則提供了如下方法類創建RowSet實例:

1、CacheRowSet createCachedRowSet();創建一個默認的CachedRowSet

2、FilteredRowSet createFilteredRowSet();創建一個默認的FilteredRowSet

3、JdbcRowSet createJdbcRowSet();創建一個默認的JdbcRowSet

4、JoinRowSet createJoinRowSet ();創建一個默認的JoinRowSet

5、WebRowSet createWebRowSet ();創建一個默認的WebRowSet

?

為了讓RowSet能抓取到數據,需要為RowSet設置數據庫Url、用戶名、密碼等信息。常用方法如下:

1、setUrl(String url):設置URL

2、setUserName(String Name):設置用戶名

3、setPassword(String password):設置密碼

4、setCommand(String sql):設置SQL語句

5、execute():執行查詢


示例代碼如下圖所示:

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement;import javax.sql.rowset.CachedRowSet; import javax.sql.rowset.JdbcRowSet; import javax.sql.rowset.RowSetFactory; import javax.sql.rowset.RowSetProvider;public class RowSetUtil {private String url;private String user;private String password;public RowSetUtil(String url,String user,String password){this.url = url;this.user = user;this.password = password;}static{try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 查詢SQL并修改指定結果* @param sql* @throws SQLException*/public void queryResult(String sql)throws SQLException{RowSetFactory factory = RowSetProvider.newFactory();//使用RowSetProvider創建newFactorytry(JdbcRowSet jdbcRowSet = factory.createJdbcRowSet())//使用factory創建JdbcRowSet實例{jdbcRowSet.setUrl(this.url);jdbcRowSet.setUsername(this.user);jdbcRowSet.setPassword(this.password);jdbcRowSet.setCommand(sql);try {jdbcRowSet.execute();//執行操作} catch (Exception e) {// TODO: handle exceptione.printStackTrace();throw new SQLException();}while(jdbcRowSet.next()){ System.out.println("id=" + jdbcRowSet.getLong(1) + ";productName=" + jdbcRowSet.getString(1));if (jdbcRowSet.getLong("Id") == 218) {jdbcRowSet.updateString("ProductName", "測試");jdbcRowSet.updateRow();}}}}/*** 離線RowSet模式* @param sql* @throws SQLException*/public void queryResultOffLine(String sql) throws SQLException{try(Connection connection = DriverManager.getConnection(this.url, this.user, this.password);Statement statement = connection.createStatement();ResultSet rSet = statement.executeQuery(sql);){RowSetFactory factory = RowSetProvider.newFactory();CachedRowSet cachedRowSet = factory.createCachedRowSet();cachedRowSet.populate(rSet);//使用cachedRowSet裝填cachedRowSetResultSetMetaData rSetMetaData = cachedRowSet.getMetaData();//轉化為rSetMetaData才能進行獲取列名信息int colCount = rSetMetaData.getColumnCount();for (int i = 1; i <= colCount; i++) {System.out.println("第" + i + "列列名是" + rSetMetaData.getColumnName(i) + ";類型是" + rSetMetaData.getColumnTypeName(i));}}} }

?

總結

以上是生活随笔為你收集整理的JDBC中使用RowSet包装结果集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。