JavaWeb——JDBC_總結

1.JDBC概述:

Java database connection:java數據庫連接;

爲什麼要用Java連接數據庫?

我們所需要的程序是自動化執行的,不是通過鍵盤在控制檯下輸入命令來控制DB的

JDBC是接口,而JDBC驅動纔是接口的實現,沒有驅動無法完成數據庫連接!每個數據庫廠商都有自己的驅動,用來連接自己公司的數據庫

2.JDBC步驟:

l 導入jar包

l 註冊驅動

l 獲得連接

l 獲得發送命令對象

l 發送命令,獲得返回資源

l 處理返回的資源

l 關閉資源

    2.1  DriverManager類講解

  Jdbc程序中的DriverManager用於加載驅動,並創建與數據庫的鏈接,這個API的常用方法

  Class.forName("com.mysql.jdbc.Driver");

  DriverManager.getConnection(url, user, password),

    2.2   數據庫URL講解

   URL用於標識數據庫的位置,通過URL地址告訴JDBC程序連接哪個數據庫

常用數據庫URL地址的寫法:

  Oracle寫法: jdbc:oracle:thin:@localhost:1521:sid

  SqlServer寫法: jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid

  MySql寫法: jdbc:mysql://localhost:3306/sid

 
  如果連接的是本地的Mysql數據庫,並且連接使用的端口是3306,
 那麼的url地址可以簡寫爲: jdbc:mysql:///數據庫

    2.3  Connection類講解

     Jdbc程序中的Connection,它用於代表數據庫的鏈接,Collection是數據庫編程中最
重要的一個對象,客戶端與數據庫所有交互都是通過connection對象完成的,這個對象的常
用方法:
 
createStatement():創建向數據庫發送sql的statement對象。
prepareStatement(sql) :創建向數據庫發送預編譯sql的PrepareSatement對象。
prepareCall(sql):創建執行存儲過程的callableStatement對象。 
setAutoCommit(boolean autoCommit):設置事務是否自動提交。 
commit() :在鏈接上提交事務。
rollback() :在此鏈接上回滾事務。
 

    2.4 Statement類講解

 Jdbc程序中的Statement對象用於向數據庫發送SQL語句,Statement對象常用方法:
 
executeQuery(String sql) :用於向數據發送查詢語句。
executeUpdate(String sql):用於向數據庫發送insert、update或delete語句
execute(String sql):用於向數據庫發送任意sql語句
addBatch(String sql) :把多條sql語句放到一個批處理中。
executeBatch():向數據庫發送一批sql語句執行。
 

     2.5 ResultSet類講解

Jdbc程序中的ResultSet用於代表Sql語句的執行結果。Resultset封裝執行結果時,採
用的類似於表格的方式.ResultSet 對象維護了一個指向表格數據行的遊標,初始的時候,遊
標在第一行之前,調用ResultSet.next() 方法,可以使遊標指向具體的數據行,進行調用方
法獲取該行的數據。
 
ResultSet既然用於封裝執行結果的,所以該對象提供的都是用於獲取數據的get方法:
 
獲取任意類型的數據
getObject(int index)
getObject(string columnName)
獲取指定類型的數據,例如:
getString(int index)
getString(String columnName)
ResultSet還提供了對結果集進行滾動的方法:
next():移動到下一行
Previous():移動到前一行
absolute(int row):移動到指定行
beforeFirst():移動resultSet的最前面。
afterLast() :移動到resultSet的最後面。

釋放資源
Jdbc程序運行完後,切記要釋放程序在運行過程中,創建的那些與數據庫進行交互
的對象,這些對象通常是ResultSet, Statement和Connection對象,特別是Connection
對象,它是非常稀有的資源,用完後必須馬上釋放,如果Connection不 能及時、正確的關
閉,極易導致系統宕機。Connection的使用原則是儘量晚創建,儘量早的釋放。
爲確保資源釋放代碼能運行,資源釋放代碼也一定要放在finally語句中。

3.使用JDBC對數據庫進行CRUD

    3.1 statement對象介紹

Jdbc中的statement對象用於向數據庫發送SQL語句,想完成對數據庫的增刪改查,只需
要通過這個對象向數據庫發送增刪改查語句即可.
 
executeUpdate方法,用於向數據庫發送增、刪、改的sql語句,
        executeUpdate執行完後,將會返回一個整數(即增刪改語句導致了
        數據庫幾行數據發生了變化)。
executeQuery方法用於向數據庫發送查詢語句,
         executeQuery方法返回代表查詢結果的ResultSet對象.
* create
Statement st = conn.createStatement();
String sql = "insert into user(….) values(…..) "; 
int num = st.executeUpdate(sql);
if(num>0){
    System.out.println("插入成功!!!");
}
 
* update
Statement st = conn.createStatement();
String sql = “update user set name=‘’ where name=‘’"; 
int num = st.executeUpdate(sql);
if(num>0){
    System.out.println(“修改成功!!!");
}
 
* delete
Statement st = conn.createStatement();
String sql = “delete from user where id=1; 
int num = st.executeUpdate(sql);
if(num>0){
    System.out.println(“刪除成功!!!");
}
 
* read
Statement st = conn.createStatement();
String sql = “select * from user where id=1; 
ResultSet rs = st.executeUpdate(sql);
while(rs.next()){
    //根據獲取列的數據類型,分別調用rs的相應方法映射到java對象中
}

    3.2 PreparedStatement對象介紹

PreperedStatement是Statement的子類
相對於Statement:
PreperedStatement獲取方式不一樣
性能高
    可以防止SQL注入

獲得方式:它的實例對象可以通過調用Connection.preparedStatement()方法獲得,
相對於Statement對象而言:PreperedStatement可以避免SQL注入的問題。
 
Statement會使數據庫頻繁編譯SQL,可能造成數據庫緩衝區溢出。PreparedStatement可對SQL進行預編譯,
從而提高數據庫的 執行效率。並且PreperedStatement對於sql中的參數,允許使用佔位符的形式進行替換,
簡化sql語句的編寫。

String sql = “select * from tab_student where s_number=?”;
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, “S_1001”);
ResultSet rs = pstmt.executeQuery();
rs.close();


SQL注入

 SELECT * FROM users WHERE NAME= 'ss' AND PASSWORD = '' OR '1' = '1'; 
 SELECT * FROM users WHERE NAME= 'ss' AND PASSWORD = '';DROP TABLE users;


4.MySQL數據庫中操作事務命令

開啓事務(start transaction)
        使用"start transaction"開啓MySQL數據庫的事務

提交事務(commit)

回滾事務(rollback)

5.JDBC中使用事物

當Jdbc程序向數據庫獲得一個Connection對象時,默認情況下這個Connection對象會
自動向數據庫提交在它上面發送的SQL語句.若想關閉這種默認提交方式,讓多條
SQL在一個事務中執行,可使用下列的JDBC控制事務語句
Connection.setAutoCommit(false);//開啓事務(start transaction)
Connection.rollback();//回滾事務(rollback)
Connection.commit();//提交事務(commit)

6.使用JDBC進行批處理

在實際的項目開發中,有時候需要向數據庫發送一批SQL語句執行,這時應避免向數據庫一條條的發送執行,而應採用
JDBC的批處理機制,以提升執行效率.
JDBC實現批處理有兩種方式:statement和preparedstatement

6.1 使用Statement完成批處理

1.使用Statement對象添加要批量執行SQL語句,如下:
 Statement.addBatch(sql1);
 Statement.addBatch(sql2);
 Statement.addBatch(sql3);
2、執行批處理SQL語句:Statement.executeBatch();
3、清除批處理命令:Statement.clearBatch();
 
採用Statement.addBatch(sql)方式實現批處理的優缺點
 優點:可以向數據庫發送多條不同的SQL語句。
 缺點:SQL語句沒有預編譯。
insert into account values(1,’DD’,100);

6.2 使用PreparedStatement完成批處理

使用PreparedStatement完成批處理範例
long starttime = System.currentTimeMillis();





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章