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包装结果集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Web API简单学习
- 下一篇: ES 基本操作