java jdbc rowset_JAVA基礎知識之JDBC——RowSet

RowSet概念

在C#中,提供了一個DataSet,可以把數據庫的數據放在內存中進行離線操作(讀寫),操作完成之后再同步到數據庫中去,Java中則提供了類似的功能RowSet.

RowSet接口繼承自ResultSet接口。與ResultSet相比,RowSet默認是可滾動、可更新、可序列化的結果集,可以作為JavaBean來方便地在網絡上傳輸,用于同步兩端數據。對于離線RowSet而言,

程序從創建RowSet時就已經把數據load進內存,因此可以更好地利用內存性能,降低數據庫服務器的負載,提高程序性能。

RowSet接口下包含了JdbcRowSet, CachedRowSet, FilteredRowSet, JoinRowSet, WebRowSet,除了JdbcRowSet之外,后面四個都是離線RowSet,它們之間的繼承關系如下,

6dd86a6f5ed9fc407f3cb8f0f181f304.png

RowSetFactory

在JDK1.6及以前的版本中,如果要使用JdbcRowSet,則必須使用JdbcRowSetImpl的構造器來構造對象,但是在編譯的時候會有警告,因此JdbcRowSetImpl是內部專用的API,在未來版本可能會刪除。這種獲取JdbcRowSet的方式是不推薦的,因為使用內部API,在將來的版本中可能不兼容,而且這樣的程序直接與具體的實現類JdbcRowSetImpl耦合,不利于維護和升級。

在JDK1.7中,這個問題得到了改善。JDK1.7引入了RowSetFactory和RowSetProvider接口,其中RowSetProvider負責創建RowSetFactory,而RowSetFactory則可以通過以下方法創建RowSet實例,

createCachedRowSet()

createFilteredRowSet()

createJdbcRowSet()

createJoinRowSet()

createWebRowSet()

通過RowSetFactory,程序就可以與RowSet的實現類分離,避免了直接使用具體的實現類JdbcRowSetImpl。

創建對象時可以傳入ResultSet實例填充RowSet,也可以在創建JdbcRowSet實例之后通過execute(sql)方法得到數據填充RowSet,

下面演示使用RowSetFactory和RowSetProvider接口獲取RowSet實例并使用的方法,

1 packagedb;2

3 importjava.io.FileInputStream;4 importjava.io.FileNotFoundException;5 importjava.io.IOException;6 importjava.sql.Connection;7 importjava.sql.DriverManager;8 importjava.sql.SQLException;9 importjava.util.Properties;10

11 importjavax.sql.rowset.JdbcRowSet;12 importjavax.sql.rowset.RowSetFactory;13 importjavax.sql.rowset.RowSetProvider;14

15

16 public classRowSetFactoryTest {17 privateString driver;18 privateString url;19 privateString user;20 privateString pass;21 public void initParam(String paramFile) throwsFileNotFoundException, IOException, ClassNotFoundException {22 //用Properties類加載屬性文件

23 Properties prop = newProperties();24 prop.load(newFileInputStream(paramFile));25 driver = prop.getProperty("driver");26 url = prop.getProperty("url");27 user = prop.getProperty("user");28 pass = prop.getProperty("pass");29 Class.forName(driver);30 }31

32 public void update(String sql) throwsSQLException {33 RowSetFactory factory =RowSetProvider.newFactory();34

35 try(36 //使用RowSet的execute方式返回數據,則不再需DriverManager連接數據庫了37 //Connection conn = DriverManager.getConnection(url, user, pass);

38 /*

39 * for JDK1.640 * JdbcRowSet jdbcRs = new JdbcRowSetImpl(conn);41 */

42 //for JDK 1.7

43 JdbcRowSet jdbcRs =factory.createJdbcRowSet();44 ) {45 jdbcRs.setUrl(url);46 jdbcRs.setUsername(user);47 jdbcRs.setPassword(pass);48 jdbcRs.setCommand(sql);49 jdbcRs.execute();50

51 jdbcRs.afterLast();52 //向前滾動結果集

53 while(jdbcRs.previous()) {54 System.out.println(jdbcRs.getInt(1)+"\t"+jdbcRs.getString(2)+"\t"+jdbcRs.getString(3));55

56 if (jdbcRs.getInt("jdbc_id") == 3) {57 //修改指定行記錄,因為 JdbcRowSet 繼承自 ResultSet, 所以修改記錄的方式也一樣

58 jdbcRs.updateString("jdbc_name", "小明");59 jdbcRs.updateRow();60 System.out.println("修改成功: ");61 System.out.println(+jdbcRs.getInt(1)+"\t"+jdbcRs.getString(2)+"\t"+jdbcRs.getString(3));62 }63

64 }65 }66 }67

68 public static void main(String[] args) throwsFileNotFoundException, ClassNotFoundException, IOException, SQLException {69 RowSetFactoryTest jt = newRowSetFactoryTest();70 jt.initParam("mysql.ini");71 jt.update("select * from jdbc_test");72 }73 }

執行上面程序會發現第3行被修改了,需要注意的是JdbcRowSet并不是離線的RowSet,因此需要在數據庫保持連接的情況下才能修改數據

因為JdbcRowSet接口繼承自ResultSet,所以修改數據的方法跟ResultSet一樣的。 程序執行結果如下,

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 27學生名27 學生名282 26學生名26 學生名273 25學生名25 學生名264 24學生名24 學生名255 23學生名23 學生名246 22學生名22 學生名237 21學生名21 學生名228 20學生名20 學生名219 19學生名19 學生名2010 18學生名18 學生名1911 17學生名17 學生名1812 16學生名16 學生名1713 15學生名15 學生名1614 14學生名14 學生名1515 13學生名13 學生名1416 12學生名12 學生名1317 11學生名11 學生名1218 10學生名10 學生名1119 9學生名9 學生名1020 8學生名8 學生名921 7學生名7 學生名822 6學生名6 學生名723 5學生名5 學生名624 4學生名4 學生名525 3小明 小強26 修改成功:27 3小明 小強28 2學生名2 學生名329 1 學生名1 學生名2

View Code

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533232.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533232.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533232.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java廚房_JAVA環境搭建,廚房安裝圖文教程!

在“系統變量”欄下執行三項操作:①新建“Java_Home”,設置其值為 JDK所在的絕對路徑,如果你的事剛才的默認路徑,那值為:C:Program FilesJavajdk1.7.0_02②新建“Classpath”(如果已有,則直接編輯)&#xf…

java post get 請求_java get post 請求

packagewzh.Http;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.URL;importjava.net.URLConnection;importjava.util.List;importjava.util.Map;public classHttpRequest {/*** 向指定UR…

用java做日記本系統_jsp+servlet開發java web個人日記本系統

項目描述Jsp_Servlet技術使用個人日記本系統,主要有日記分類,添加日記,刪除日記和一些個人資料的修改。運行環境jdk8tomcat7mysql5.6IntelliJ IDEA(eclipse)項目技術(必填)Jsp Servletbootstrapjqueryckeditor數據庫文件(可選)鏈接&#xff1…

java類加載過程_java類的加載過程

在這本書里面,在講到類初始化的五種情況時,提及了一個比較有趣的事情。先來看看下面的代碼public class SubClass {static{System.err.println("I m your son");}public static final int name 111;}這個時候如果調用SubClass.name&#xff0…

java mvc 導出excel_Java springMVC POI 導出 EXCEL

思路 :將需要導出的數據存放在一個List中創建一個EXCEL表 注意 XSSFWorkbook 只能操作2007以上的版本,XSSFWorkbook 只能操作2003一下的版本,所以需要的時候可以使用 Workbook創建對象處理兼容性遍歷List 并將每條數據 寫入 EXCEL表中具體代碼…

java 排序原理_簡單選擇排序算法原理及java實現(超詳細)

簡單選擇排序的原理簡單選擇排序的原理非常簡單,即在待排序的數列中尋找最大(或者最小)的一個數,與第 1 個元素進行交換,接著在剩余的待排序的數列中繼續找最大(最小)的一個數,與第 2 個元素交換。以此類推,一直到待排…

python對象點方法_python面向對象知識點疏理

面向對象技術簡介類:用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。class類變量:類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作為實例變量使用。數據成員&#…

ckeditor java 上傳_CKEditor粘貼圖片自動上傳到服務器(Java版)

環境:java,springmvc,ckeditor,tomcat,maven情況:在做項目的時候發現本地圖片粘貼到ckeditor中,img標簽的src中的值是“data:image/png;base64,”開頭的,后面會跟一串字符串,圖片越大字符串越長,這樣的圖片…

java 序列化聲明_顯式聲明默認Java類序列化方法的原因是什么?

我定期看到具有以下結構的Java類:class MyClass implements Serializable {private static final long serialVersionUID 1L;// ...private void writeObject(final java.io.ObjectOutputStream s) throws IOException {s.defaultWriteObject();}private void read…

java 百度poi_Android應用中使用百度地圖API之POI(三)

先看執行后的圖吧:POI(Point of Interest)。中文能夠翻譯為“興趣點”。在地理信息系統中。一個POI能夠是一棟房子、一個商鋪、一個郵筒、一個公交站等 具體:http://developer.baidu.com/map/sdkandev-4.htm主要應用 MKSearch 類:com.baidu.…

java 順序存儲鍵值對_java://Comparator、Comparable的用法(按照要求將map集合的鍵值對進行順序輸出)...

import java.util.*;public class Person implements Comparable//使Person的屬性具有比較性{private String name;private int age;public Person(String name,int age)//初始化構造函數{this.name name;this.age age;}public void set(String name,int age)//重新設置姓名和…

java日歷事件處理_日歷表的事件處理和管理(劉靜)

1 //添加gridview,顯示具體的日期2 SuppressLint("ResourceAsColor")3 private voidaddGridView() {4 LinearLayout.LayoutParams params newLinearLayout.LayoutParams(5 LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);6 //取得屏幕的寬度和高度7 WindowMa…

java第四次上機作業_第十java上機作業

第十java上機作業 第七章上級作業 7.1 public class Rectangle { double width1; double height1; String color“white“; public Rectangle(){} public Rectangle(double width,double height,String color) { this.widthwidth; this.heightheight; this.colorcolor; } publi…

java解析帶斜杠的參數_Java Spring MVC應用程序僅接受帶有斜杠的POST請求

war文件名是forms.war。 web.xml中的url模式為"/"控制器操作的RequestMapping為"/"如果遇到localhost:8080 /表單,則RequestMethod.GET操作正常工作如果針對localhost:8080/forms點擊發布數據,則不會觸發RequestMethod.P…

java文件編碼格式環境變量_Jenkins maven 構建亂碼,修改file.encoding系統變量編碼為UTF-8...

一切都是windows的控制臺默認編碼GBK問題情景:使用jenkins構建,console 輸出的中文亂碼。代碼編碼格式是utf-8,因為Jenkins會默認讀取當前系統的編碼格式,導致構建日志亂碼和selenium自動化測試輸入的中文亂碼。控制臺輸出亂碼摸索…

http multipart java_Http MultiPart請求

我正在嘗試使用httpClient庫上傳圖像(多部分/表單數據) . 我可以使用httpPost方法和byteArrayRequestEntity上傳圖像 . 以下是我使用的代碼:File file new File(imageFilePath);HttpClient client new HttpClient();PostMethod method new PostMethod("http…

java分布式會話redis_詳解springboot中redis的使用和分布式session共享問題

對于分布式使用NginxTomcat實現負載均衡,最常用的均衡算法有IP_Hash、輪訓、根據權重、隨機等。不管對于哪一種負載均衡算法,由于Nginx對不同的請求分發到某一個Tomcat,Tomcat在運行的時候分別是不同的容器里,因此會出現session不…

python3.8使用方法_python3.8新特性

python3.8新特性Python3.8穩定版已發布,官網發布了一篇介紹新特性的文章,在此記錄一下。新增賦值操作符:作用:把較大表達式中的某部分值賦給變量,因為看起來像海象的眼睛和牙齒,: 操作符有個特別的名字:海象操作符范例…

java責任鏈設計模式 訂單_Java責任鏈設計模式實例分析

本文實例講述了Java責任鏈設計模式。分享給大家供大家參考,具體如下:一 代碼abstract class AbstractHandler {private Handler Handler null;// 持有責任鏈中下一個責任處理者的引用public void setHandler( Handler handler ) {this.Handler handler…

java map去重復的數據_使用HashMap去重復數據.

因為HashMap是鍵值對形式,所以一個鍵只對應一個Value,利用這個原理,我們就可以根據某列重復數據做鍵對重復數據進行處理啦~首先先看看我要處理 的數據然后我最后想要的結果:需求:根據groupName每個分組信息只顯示一條數…