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();