JDBC資料輔導(2)

2021-08-29 19:05:32 字數 2723 閱讀 6208

一、jdbc原理

二、statement

execute(sql); 當不知道執行的sql語句是什麼型別的時候執行 ,返回值是boolean

executequery(sql); 執行查詢語句

executeupdate(sql); 執行更新語句

三、preparedstatement

可以使用引數替代sql語句中的某些引數使用 "?"代替,他先將帶引數的sql語句傳送到資料庫,進行編譯,然後preparedstatement會將引數傳送給資料庫。

在使用preparedstatement時,在設定相應引數時,要指明引數的位置和型別,以及給出引數值

根據不同的引數型別使用不同的set***(引數的位置,引數值)來設定引數

例:public void insert(student s) catch (sqlexception e) finally catch (sqlexception e)

if(con!=null)

try catch (sqlexception e) }}

callablestatement是可以用非sql語句來訪問資料庫,他是通過呼叫儲存過程(pl/sql)來訪問資料庫的。可以直接使用連線來呼叫 preparecall(...)方法,來執行這個儲存過程,"..."是儲存過程的名字。

對於系統時間要去資料庫時間

timestamp 和 date都可以儲存時間

timestamp可以儲存時、分、秒的資料,date只儲存日期年月的資訊。

sqlexception是檢查異常必須處理要麼throws ,要麼try{}catch(){}

geterrorcode()可以獲得錯誤碼,可以對錯誤進行查詢。

四、源資料

jdbc中有兩種源資料,一種是資料庫源資料,另一種是resultset源資料。

源資料就是描述儲存使用者資料的容器的資料結構。

resultset rs=ps.executequery(sql);

resultsetmetadata m=rs.getmetadata();

getcolumncount(),獲得實際列數

getcolumnname(int colnum),獲得指定列的列名

getcolumntype(int colnum),獲得指定列的資料型別

getcolumntypename(int colnum),獲得指定列的資料型別名

//列印結果集

public static void printrs(resultset rs)throws sqlexception

system.out.print(name+"="+value);

}system.out.println();}}

五、資料庫源資料

databasemetadata

geturl(),獲得連線資料庫的url

getdatabaseproductname() 獲得資料庫產品的名稱

getdriverversion() 獲得jdbc驅動程式的string形式的版本號

gettables()獲得資料庫中該使用者的所有表

getusername() 獲得資料庫使用者名稱。

六、事務(transaction)

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

事務是**的原子操作的邊界。

jdbc中使用事務,先要使用連線呼叫setautocommite(false)方法,把自動提交(commit)置為false。開啟事務就要關閉自動提交。不用事務是要把setautocommite(true)

在處理事務時,在傳送sql語句後執行成功並確認時,就在try塊中使用連線呼叫commit()方法來傳送提交資訊,

在傳送sql語句後執行失敗時,會在catch語句塊中使用連線呼叫rollback()方法來傳送回滾資訊,也可以在需要時做回滾操作(主觀原因)。

七、jdbc事務併發產生的問題和事務隔離級別

1,髒讀(dirty read),讀取到了沒有提交的資料。

2,不可重複讀(unprpeatable read),兩次讀取到了不同的資料,就是要保持在同一時間點上兩次讀取到的資料相同,

不能夠使查詢資料時進行改變。

3,幻讀(phantom),在兩次查詢同一時間點資料時,資料數量發生改變,要保持在同一時間點上兩次讀取到的資料相同。

事務隔離級別

transaction_none不使用事務。

transaction_read_uncommitted 可以讀取為提交資料。

transaction_read_committed可以避免髒讀,不能夠讀取沒提交的資料,最常用的隔離級別  大部分資料庫的預設隔離級別

transaction_repeatable_read可以避免髒讀,重複讀取,

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

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

八,異常的處理

try{}

catch(sqlexception){}

try{}

catch(exception){}

Spring資料輔導(2)

特點 1.預先載入,把物件全部例項化到容器中 2.提供了很多介面 對國際化,事件模型,自動註冊等工具 讓容器對我們的bean物件大小改寫的例子 寫類實現beanpostporcessor介面,有初始化之前和初始化之後兩個方法 是容器提供的介面,對這兩個方法實現我們自己的想法,把容器提供的引數bean...

Spring資料輔導(3)

動態 在測試類中來指定 daoif target new dao daoif prox daoif proxy.newproxyinstance target.getclass getclasslocader 構造乙個物件,三個引數分別是 載入器,介面,做什麼的封裝類 但是我們還自己寫封裝類實現in...

EJB的資料輔導(5)

ejb擴充套件元件 ejb的依賴注入,都是依賴於jndi的。在ejb組建中呼叫其他的ejb元件 可以借助於jndi,查詢到其他ejb元件,也可以借助於業務介面,呼叫ejb例項中的業務方法,也可以同國直接引用其他的需要的ejb元件的業務介面,但是需要使用標註。例 ejb taxrate tr 標註 r...