jdbc學習筆記 三

2021-08-22 11:09:37 字數 3979 閱讀 1296

一.事務(transaction)

原子操作:不可再分的操作,乙個操作不能再分成比它更細小的操作.

事務是針對原子操作的,要求原子操作不可再分,並且必須同時成功同時失敗。

事務就是把一些非原子操作,變成原子操作,由應用伺服器來提出要求,由資料庫伺服器來執行操作.

在jdbc中預設是自動提交的,如果要想使用事務,需要按以下步驟執行:

1.要呼叫con.setautocommite(false)方法,把自動提交(commit)置為false。

2.進行正常的資料庫操作

3.如果操作成功了可以選擇con.commit(),或者操作失敗時選擇con.roolback();

注意:開啟事務就要關閉自動提交,當不需要再使用事務的時候呼叫setautocommite(true).

二.事務併發產生的問題

三種併發產生的後果:

1,髒讀:乙個事務讀取到了另外乙個事務沒有提交的資料。

2,重複讀:乙個事務讀取到了另外乙個事務提交的資料。它是要保持在同一時間點上讀取到的資料相同,希望在一段時間內的資料是不變的。

3,幻讀:乙個事務讀取到了另外乙個事務提交的資料。用同樣的操作讀取兩次,得到的記錄數不相同。

三.事務隔離級別

五種控制級別:

transaction_none不使用事務。

transaction_read_uncommitted 允許髒讀。

transaction_read_committed防止髒讀,最常用的隔離級別,並且是大多數資料庫的預設隔離級別

transaction_repeatable_read可以防止髒讀和不可重複讀,

transaction_serializable可以防止髒讀,不可重複讀取和幻讀,(事務序列化)會降低資料庫的效率

以上的五個事務隔離級別都是在connection類中定義的靜態常量,使用settransactionisolation(int level) 方法可以設定事務隔離級別。

如:con.settransactionisolation(connection.repeatable_read);

四.jdbc2.0新特性

1.可滾動特性和可更新特性

jdbc1.0中是指游標的移動的方向和方式是單向,單步(相對)移動,功能比較簡單.

jdbc2.0中游標可以雙向,相對或者絕對移動.

可滾動結果集:這種結果集不但可以雙向滾動,相對定位,絕對定位,並且還可以修改資料資訊。

1)滾動特性

定位函式:

boolean absolute(int row),定位到指定的記錄位置。定位成功返回true,不成功返回false。

void afterlast() ,把游標移動到最後一條記錄的後面(邏輯位置)。

void beforefirst() ,把游標移動到第一條記錄的前面(邏輯位置)。

//由於第一條記錄的前面和最後一條記錄的後面這兩個位置肯定存在,所以無需判斷是否存在,返回值設為void.

boolean first(),把游標定位到第一條記錄。

boolean last(),把游標定位到最後一條記錄。

//當結果集為空的時候,這兩個方法會返回false.

boolean next(),此方法是使游標向下一條記錄移動。

boolean previous() ,此方法可以使游標向上一條記錄移動,前提是前面還有記錄。

boolean relative(int rows) ,相對定位方法,引數值可正可負,引數為正,游標從當前位置向後移動指定值條記錄,引數為負,游標從當前位置向前移動指定值條記錄。

判斷函式:

ifbeforefirst()判斷是否在在第一條記錄之前.

ifafterlast()判斷是否在在最後一條記錄之後.

iffirst()判斷是否為第一條記錄.

iflast()判斷是否為最後一條記錄.

要使用可滾動結果集時,需要一次設定更新特性與滾動特性,不能分開.

1.更新特性常量:

concur_read_only 唯讀結果集(預設)

concur_updatable 可更新結果集

2.滾動特性常量:

type_forward_only ,該常量表示指標只能向前移動的 resultset 物件的型別。(預設)

type_scroll_insensitive ,該常量指示可滾動但通常不受其他更改影響的 resultset 物件的型別。

type_scroll_sensitive ,該常量指示可滾動並且通常受其他更改影響的 resultset 物件的型別。

//敏感:資料庫改變,結果集改變.

語法:

statement st=null;

st=con.createstatement(reusltset.type_scroll_insensitive,resuleset.concur_updatable)

在建立statement的時候就要指定這兩個引數,使用statement,第乙個引數代表滾動特性常量,第二個代表更新特性常量

2)可更新特性

a.movetoinsertrow();記錄當前游標位置,將游標移到和結果集結構類似的緩衝區;

b.使用update***(int column,columntype value)方法來更新指定列資料;

c.使用insertrow() 方法插入記錄;

d.將游標指回原位,movetocurrentrow() 。

能否使用jdbc2.0 resultset的新特性,要看使用的資料庫驅動是否支援.

還有只能用於單錶且表中有主鍵字段(可能會是聯合主鍵),不能夠有表連線,會取

可更新操作必須滿足以下條件:

a.查詢只能引用一張表.

b.不能包含任何連線操作.

c.必須把完整的主鍵查到結果集裡面;

d.保證所有欄位為非空字段並且沒有預設值。

五.資料庫元資料:

databasemetadata dbmd = con.getmetadata();//得到資料庫元資料

dbmd.supportsresultsetconcurrency(resultset.type_forward_only,

resultset.concur_updatable);//判斷是否支援可更新操作

六.批量更新

優勢:

1.節省傳遞時間

2.併發處理

preparedstatement:

1.addbatch() 將一組引數新增到 preparedstatement物件內部

2.executebatch() 將一批引數提交給資料庫來執行,如果全部命令執行成功,則返回更新計數組成的陣列。

statement:

addbatch(string sql)方法會在批處理快取中加入一條sql語句

executebatch()執行批處理快取中的所有sql語句。

注意:preparedstatement中使用批量更新時,要先設定好引數後再使用addbatch()方法加入快取。

批量更新中只能使用更新或插入語句

七.sql3中的資料型別

array:陣列

sturct:結構

大物件:

blob:大的二進位制資料檔案物件。

clob:大的文字檔案物件。

優點:

1.理論上大小沒有上限,受制於資料庫表空間的大小.

2.流式讀取.

使用大物件的步驟:

1.先插入乙個空的佔位物件empty_blob()(oracle的函式):insert into t_blob values(?,?,empty_blob());

2.獲得大物件:select blob_data from t_blob where name = ? for update;

3.獲取流進行寫入:blob.setbinarystream(0);

4.通過流來獲取blob中儲存的資料:blob.getbinarystream()

jdbc學習筆記 三

一.事務 transaction 原子操作 不可再分的操作,乙個操作不能再分成比它更細小的操作.事務是針對原子操作的,要求原子操作不可再分,並且必須同時成功同時失敗。事務就是把一些非原子操作,變成原子操作,由應用伺服器來提出要求,由資料庫伺服器來執行操作.在jdbc中預設是自動提交的,如果要想使用事...

JDBC 學習筆記 三

jdbc 學習筆記 三 三 幾個重要介面 1 statement sql語句執行介面 statement介面代表了乙個資料庫的狀態,在向資料庫傳送相應的sql語句時,都需要建立statement介面或者preparedstatement介面。在具體應用中,statement主要用於操作不帶引數 可以...

JDBC學習筆記

size medium color red 本節jdbc的操作學習大致分為 color size size medium color red list 資料庫的裝載和連線 資料庫的增刪改查 資料庫的預編譯 資料庫的事務管理 list color size 下面直接上 了,還是 比較實在 以mysql...