關於JDBC的使用

2021-04-18 04:12:30 字數 3875 閱讀 8217

1、connection conn = connectionutil.getconnection();

setautocommit(boolean autocommit)

將此連線的自動提交模式設定為給定狀態。如果連線處於自動提交模式下,則將執行其所有 sql 語句,

並將這些語句作為單獨的事務提交。否則,其 sql 語句將成組地進入通過呼叫 commit 方法或 rollback

方法終止的事務中。預設情況下,新的連線處於自動提交模式下。為保證事務完整,建議設定為false。

2、statement,preparedstatement(是statement的子類) 建立

//     conn.preparestatement(sql,游標型別,能否更新記錄);

//     conn.createstatement(游標型別,能否更新記錄);

//      游標型別:

//       resultset.type_forword_only:只進游標

//       resultset.type_scroll_insensitive:可滾動。但是不受其他使用者對資料庫更改的影響。

//       resultset.type_scroll_sensitive:可滾動。當其他使用者更改資料庫時這個記錄也會改變。

//      能否更新記錄:

//       resultset.concur_read_only,唯讀

//       resultset.concur_updatable,可更新

3、statement,preparedstatement 執行sql

3.1、statement

3.1.1、單一sql語句

statement ps1 = conn1.createstatement(resultset.type_scroll_insensitive,resultset.concur_read_only);

resultset rs1 = ps1.executequery("select * from area");

int rs1 = ps1.executeupdate("delete from area");

int rs1 = ps1.executeupdate("insert into area(id,name,phone) values(12, 'me', '67183662')");

int rs1 = ps1.executeupdate("update area set name='you'");

int rs1 = ps1.executeupdate("create table products ( prod_id number(4), prod_name vaechar2(20), stock_qty number(5,3) )");

3.1.2、批處理sql語句(非查詢)

statement ps1 = conn1.createstatement(resultset.type_scroll_insensitive,resultset.concur_read_only);

ps1.addbatch("delete from area");

ps1.addbatch("insert into area(id,name,phone) values(12, 'me', '67183662')");

ps1.addbatch("update area set name='you'");

ps1.addbatch("create table products ( prod_id number(4), prod_name vaechar2(20), stock_qty number(5,3) )");

int rs1 = ps1.executebatch();

3.1.3、commit()提交事務 

3.2、preparedstatement

3.2.1、單一sql語句

preparedstatement pstmt=conn2.preparestatement("select * from tbcity where code=?");

pstmt.setint(1,code);

resultset rs = pstmt.executequery();

preparedstatement pstmt=conn2.preparestatement("insert into tbcity(code,name,parentid,type) values (?,?,?,?)");

pstmt.setint(1,code);

pstmt.setstring(2, name);

pstmt.setint(3,parentid);

pstmt.setint(4, 3);

int rs = pstmt.executeupdate();

preparedstatement pstmt=conn2.preparestatement("delete from area where code=?");

pstmt.setint(1,12);

int rs = pstmt.executeupdate();

preparedstatement pstmt=conn2.preparestatement("update area set name=?");

pstmt.setstring(1, "me");

int rs = pstmt.executeupdate();

preparedstatement pstmt=conn2.preparestatement("create table products ( prod_id number(4), prod_name vaechar2(20), stock_qty number(5,3) )");

int rs = pstmt.executeupdate();

3.2.2、批處理sql語句(非查詢)

preparedstatement pstmt=conn2.preparestatement("insert into tbcity(code,name,parentid,type) values (?,?,?,?)");

while(判斷條件)

pstmt.executebatch(); 

3.2.3、commit()提交事務 

3.3、查詢語句結果的處理

public boolean previous() 將游標向上移動,該方法返回boolean型資料,當移到結果集第一行之前時,返回false。

public void beforefirst 將游標移動到結果集的初始位置,即在第一行之前。

public void afterlast() 將游標移到結果集最後一行之後。

public void first() 將游標移到結果集的第一行。

public void last() 將游標移到結果集的最後一行。

public boolean isafterlast() 判斷游標是否在最後一行之後。

public boolean isbeforefirst() 判斷游標是否在第一行之前。

public boolean iffirst() 判斷游標是否指向結果集的第一行。

public boolean islast() 判斷游標是否指向結果集的最後一行。

public int getrow() 得到當前游標所指向行的行號,行號從1開始,如果結果集沒有行,返回0。

public boolean absolute(int row) 將游標移到引數row指定的行號。如果row取負值,就是倒數的行數,absolute(-1)表示移到最後一行,absolute(-2)表示移到倒數第2行。當移動到第一行前面或最後一行的後面時,該方法返回false

4、請在處理完資料查詢之後

在finally中關閉 resultset,preparedstatement,statement,connection 並把它們置為null

關於jdbc連線

1 載入jdbc驅動,載入mysql的驅動類 class.forname com.mysql.jdbc.driver 2 提供jdbc連線的url jdbc mysql localhost 3306 test?useunicode true characterencoding gbk 3 建立資料庫...

關於使用原生JDBC批量處理資料的問題

最近再處理位元組解析問題的時候,突然想到去年年底做的乙個關於大量資料儲存或者修改資料庫的問題。專案先不說,具體要實現的功能就是將根據路線計算出來的路面柵格資料儲存進資料庫,並將柵格上所屬的變數實時更新。最初是想使用平台的hibernate框架來進行處理。後來打算先嘗試下原生的jdbc。我們使用的資料...

JDBC的使用步驟

使用jdbc對mysql進行操作,主要分為這樣幾個步驟 首先,定義幾個變數,方便後續關閉該連線 connection conn null statement stat null resultset rs null 接下來,具體步驟 1.註冊驅動 class.forname com.mysql.cj....