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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java resultset 映射到实例_[Java]ResultSet的用法与实例

發布時間:2023/12/1 java 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java resultset 映射到实例_[Java]ResultSet的用法与实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JDBC API 2.0/3.0中ResultSet記錄集的簡便實用的新特性

1 新定義了若干個常數

這些常數用于指定ResultSet 的類型游標移動的方向等性質,如下所示:

public static final int FETCH_FORWARD; 該常數的作用是指定處理記錄集中行的順序,是由前到后即從第一行開始處理一直到最后一行;

public static final int FETCH_REVERSE; 該常數的作用是指定處理記錄集中行的順序,是由后到前即從最后一行開始處理一直到第一行;

public static final int FETCH_UNKNOWN; 該常數的作用是不指定處理記錄集中行的順序,由JDBC 驅動程序和數據庫系統決定;

public static final int TYPE_FORWARD_ONLY; 該常數的作用是指定數據庫游標的移動方向是向前,不允許向后移動即只能使用ResultSet 接口的next()方法而不能使用previous()方法否則會產生錯誤;

public static final int TYPE_SCROLL_INSENSITIVE; 該常數的作用是指定數據庫游標可以在記錄集中前后移動,并且當前數據庫用戶獲取的記錄集對其他用戶的操作不敏感;就是說,當前用戶正在瀏覽記錄集中的數據,與此同時,其他用戶更新了數據庫中的數據,但是當前用戶所獲取的記錄集中的數據不會受到任何影響。

public static final int TYPE_SCROLL_SENSITIVE; 該常數的作用是指定數據庫游標可以在記錄集中前后移動,并且當前數據庫用戶獲取的記錄集對其他用戶的操作敏感,就是說,當前用戶正在瀏覽記錄集,但是其它用戶的操作使數據庫中的數據發生了變化,當前用戶所獲取的記錄集中的數據也會同步發生變化,這樣有可能會導致非常嚴重的錯誤產生建議慎重使用該常數。

public static final int CONCUR_READ_ONLY; 該常數的作用是指定當前記錄集的協作方式(concurrencymode),為只讀;一旦使用了這個常數,那么用戶就不可以更新記錄集中的數據。

public static final int CONCUR_UPDATABLE; 該常數的作用是指定當前記錄集的協作方式(concurrencymode),為可以更新;一旦使用了這個常數,那么用戶就可以使用updateXXX()等方法更新記。

2 ResultSet 接口提供了一整套的定位方法

這些可以在記錄集中定位到任意一行:

public boolean absolute(int row); 該方法的作用是將記錄集中的某一行設定為當前行,亦即將數據庫游標移動到指定的行,參數row 指定了目標行的行號,這是絕對的行號,由記錄集的第一行開始計算不是相對的行號。

public boolean relative(int rows); 該方法的作用也是將記錄集中的某一行設定為當前行,但是它的參數rows 表示目標行相對于當前行的行號。

public boolean first(); 該方法的作用是將當前行定位到數據庫記錄集的第一行。

public boolean last(); 該方法的作用剛好和first()方法相反。

public boolean isFirst();

public boolean isFirst(); 該方法的作用是檢查當前行是否記錄集的第一行,如果是返回true, 否則返回false。

public boolean isLast(); 該方法的作用是檢查當前行是否記錄集的最后一行,如果是返回true ,否則返回false。

public void afterLast(); 該方法的作用是將數據庫游標移到記錄集的最后,位于記錄集最后一行的后面,如果該記錄集不包含任何的行該方法不產生作用。

public void beforeFirst(); 該方法的作用是將數據庫游標移到記錄集的最前面,位于記錄集第一行的前面,如果記錄集不包含任何的行該方法不產生作用。

public boolean isAfterLast(); 該方法檢查數據庫游標是否處于記錄集的最后面,如果是返回true ,否則返回false。

public boolean isBeforeFirst(); 該方法檢查數據庫游標是否處于記錄集的最前面,如果是返回true ,否則返回false。

public boolean next(); 該方法的作用是將數據庫游標向前移動一位,使得下一行成為當前行,當剛剛打開記錄集對象時,數據庫游標的位置在記錄集的最前面,第一次使用next()方法將會使數據庫游標定位到記錄集的第一行,第二次使用next()方法將會使數據庫游標定位到記錄集的第二行,以此類推。

public boolean previous(); 該方法的作用是將數據庫游標向后移動一位,使得上一行成為當前行。

3 ResultSet 接口添加了對行操作的支持(最令人心動之處)

修改了的記錄集接口(ResultSet 接口)的方法,使它支持可以滾動的記錄集,即數據庫游標可以在返回的記錄集對象中自由地向前或向后滾動,或者定位到某個特殊的行。利用ResultSet 接口中定義的新方法,JSP/Servlet 程序員可以用Java 語言來更新記錄集,比如插入記錄,更新某行的數據,而不是靠執行SQL 語句,這樣就大大方便了程序員的開發工作,享受Java 編程的樂趣了。

ResultSet 接口中新添加的部分方法如下所示:

public boolean rowDeleted(); 如果當前記錄集的某行被刪除了,那么記錄集中將會留出一個空位;調用rowDeleted()方法,如果探測到空位的存在,那么就返回true; 如果沒有探測到空位的存在,就返回false 值。

public boolean rowInserted(); 如果當前記錄集中插入了一個新行,該方法將返回true ,否則返回false。

public boolean rowUpdated(); 如果當前記錄集的當前行的數據被更新,該方法返回true ,否則返回false。

public void insertRow(); 該方法將執行插入一個新行到當前記錄集的操作。

public void updateRow(); 該方法將更新當前記錄集當前行的數據。

public void deleteRow(); 該方法將刪除當前記錄集的當前行。

public void updateString(int columnIndex String x); 該方法更新當前記錄集當前行某列的值,該列的數據類型是String(指Java 數據類型是String ,與之對應的JDBC 數據類型是VARCHAR 或NVARCHAR 等數據類型) 。該方法的參數columnIndex 指定所要更新的列的列索引,第一列的列索引是1 ,以此類推,第二個參數x 代表新的值,這個方法并不執行數據庫操作,需要執行insertRow()方法或者updateRow()方法以后,記錄集和數據庫中的數據才能夠真正更新。

public void updateString(String columnName String x); 該方法和上面介紹的同名方法差不多,不過該方法的第一個參數是columnName ,代表需要更新的列的列名,而不是columnIndex。

往數據庫當前記錄集插入新行的操作流程如下:

1 調用moveToInsertRow()方法;

2 調用updateXXX()方法指定插入行各列的值;

3 調用insertRow()方法往數據庫中插入新的行。

更新數據庫中某個記錄的值(某行的值)的方法是:

1 定位到需要修改的行(使用absolute() relative()等方法定位);

2 使用相應updateXXX()方法設定某行某列的新值;XXX 所代表的Java 數據類型,必須可以映射為某列的JDBC 數據類型,如果希望rollback 該項操作,請在調用updateRow()方法以前,使用cancelRowUpdates()方法,這個方法可以將某行某列的值復原;

3 使用updateRow()方法完成UPDATE 的操作。

刪除記錄集中某行(亦即刪除某個記錄)的方法:

1 定位到需要修改的行(使用absolute() relative()等方法定位);

2 使用deleteRow()

刪除記錄集中某行(亦即刪除某個記錄)的方法:

1 定位到需要修改的行(使用absolute() relative()等方法定位);

2 使用deleteRow()方法。

JDBC API 3.0 中還在ResultSet 接口中添加了updateArray() updateBlob() updateClob() updateRef()等方法

1、java數據庫操作基本流程

2、幾個常用的重要技巧:

可滾動、更新的記錄集

批量更新

事務處理

java數據庫操作基本流程:取得數據庫連接 - 執行sql語句 - 處理執行結果 - 釋放數據庫連接

1、取得數據庫連接

1)用DriverManager取數據庫連接

例子:

String className,url,uid,pwd;

className = "oracle.jdbc.driver.OracleDriver";

url = "jdbc:oracle:thin:@127.0.0.1:1521:orasvr;

uid = "system";

pwd = "manager";

Class.forName(className);

Connection cn = DriverManager.getConnection(url,uid,pwd);

2)用jndi(java的命名和目錄服務)方式

例子

String jndi = "jdbc/db";

Context ctx = (Context) new InitialContext().lookup("java:comp/env");

DataSource ds = (DataSource) ctx.lookup(jndi);

Connection cn = ds.getConnection();

多用于jsp中

2、執行sql語句

1)用Statement來執行sql語句

String sql;

Statement sm = cn.createStatement();

sm.executeQuery(sql); // 執行數據查詢語句(select)

sm.executeUpdate(sql); // 執行數據更新語句(delete、update、insert、drop等)statement.close();

2)用PreparedStatement來執行sql語句

String sql;

sql = "insert into user (id,name) values (?,?)";

PreparedStatement ps = cn.prepareStatement(sql);

ps.setInt(1,xxx);

ps.setString(2,xxx);

...

ResultSet rs = ps.executeQuery(); // 查詢

int c = ps.executeUpdate(); // 更新

3、處理執行結果

查詢語句,返回記錄集ResultSet。

更新語句,返回數字,表示該更新影響的記錄數。

ResultSet的方法:

1、next(),將游標往后移動一行,如果成功返回true;否則返回false。

2、getInt("id")或getSting("name"),返回當前游標下某個字段的值。

3、釋放連接。

cn.close();

一般,先關閉ResultSet,然后關閉Statement(或者PreparedStatement);最后關閉Connection

可滾動、更新的記錄集

1、創建可滾動、更新的Statement

Statement sm = cn.createStatement(ResultSet.TYPE_SCROLL_ENSITIVE,ResultSet.CONCUR_READ_ONLY);

該Statement取得的ResultSet就是可滾動的

2、創建PreparedStatement時指定參數

PreparedStatemet ps = cn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

ResultSet.absolute(9000);

批量更新

1、Statement

Statement sm = cn.createStatement();

sm.addBatch(sql1);

sm.addBatch(sql2);

...

sm.executeBatch()

一個Statement對象,可以執行多個sql語句以后,批量更新。這多個語句可以是delete、update、insert等或兼有

2、PreparedStatement

PreparedStatement ps = cn.preparedStatement(sql);

{

ps.setXXX(1,xxx);

...

ps.addBatch();

}

ps.executeBatch();

一個PreparedStatement,可以把一個sql語句,變換參數多次執行,一次更新。

事務的處理

1、關閉Connection的自動提交

cn.setAutoCommit(false);

2、執行一系列sql語句

要點:執行每一個新的sql語句前,上一次執行sql語句的Statement(或者PreparedStatemet)必須先close

Statement sm ;

sm = cn.createStatement(insert into user...);

sm.executeUpdate();

sm.close();

sm = cn.createStatement("insert into corp...);

sm.executeUpdate();

sm.close();

3、提交

cn.commit();

4、如果發生異常,那么回滾

cn.rollback();

總結

以上是生活随笔為你收集整理的java resultset 映射到实例_[Java]ResultSet的用法与实例的全部內容,希望文章能夠幫你解決所遇到的問題。

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