1. JDBC的概述
概述: 就是Java用來操作不同數據庫的類庫, 本質其實就是一些JavaAPI.
//Java Data Base Connectivity, Java數據庫連接(技術)
//大白話: 就是Java語言編寫的一些類和接口, 用於操作不同數據庫的.(DriverManager,Connection,Statement,PreparedStatement, ResultSet)
//集合: 就是Java用來存儲不同類型數據的容器. 大白話, 就是一些接口和類.(Collection,Set,List,Map,ArrayList,HashSet,HashMap)
//IO流: 就是Java用來操作文件(夾)的. 大白話, 就是一些類和接口(InputStream,OutputStream,Reader,Writer).
//集合的頂層都是接口, IO流的頂層都是: 抽象類.
作用:
A: 連接數據庫.
B: 向數據庫發送SQL語句.
C: 操作數據庫返回的結果集.
//如果操作的是更新語句, 返回的結果集是: int
//如果操作的是查詢語句, 返回的結果集是: ResultSet
2. 什麼是驅動?
驅動: 指的是設備間進行通信的橋樑.
3. JDBC的原理
我們知道JDBC是用來操作不同數據庫的, 但是操作不同的數據庫需要使用不同的驅動.例如: 我們想操作MySQL數據庫, 就需要安裝MySQL的驅動, 我們想操作Oracle數據庫, 就需要安裝Oracle數據庫的驅動, 如果我們操作SQLServer數據庫,
就需要安裝SQLServer數據庫的驅動, 這樣做是比較麻煩的. 因爲Java一定提供了大量的類和接口了, 但是要要求額外記憶一些
其他的類和接口, 這樣就增加了程序員的學習難度.
後來Sun公司發現了這個問題, 就和各大數據庫生產商協商決定, 由Sun公司提供統一的規範(就是一些類和接口), 數據庫生產商
提供具體的實現. Sun公司提供的這些類和接口就是: API.
4. JDBC的案例演示
A: 新建一個web03數據庫.
B: 在該庫中創建一張表: users(uid,uname,pw,age)
C: 往該表中添加數據.
D: 通過JDBC來操作數據庫.
1) 導入驅動
2) 註冊驅動
3) 獲取連接對象
4) 根據連接對象,獲取可以執行SQL語句的對象
5) 執行SQL語句,獲取結果集
6) 操作結果集
7) 釋放資源
5. JDBC的API詳解之: DriverManager
DriverManager: 驅動管理.
作用一: 用於註冊驅動. //瞭解就行了, 一般不用這種方式註冊驅動.
public static void registerDriver(Driver d); //註冊驅動. 這裏的Driver是java.sql包下的Driver接口.
/*
// com.mysql.jdbc java.sql
public class Driver implements Driver {
}
*/
上述的註冊驅動的方式, 在實際開發中是不用的, 因爲這種方式會導致: 驅動程序註冊兩次.
實際開發中的做法: 通過 反射 的方式註冊驅動.
//核心: 通過"反射"技術, 加載Driver.class字節碼文件, 因爲該類中有靜態代碼塊,
// 所以在加載該類的字節碼文件的時候, 靜態代碼塊也跟着加載了, 從而實現註冊驅動.
Class.forName("類的全類名"); //該方法的作用是: 加載指定的類的字節碼文件到 內存中.
作用二: 獲取連接對象.
public static Connection getConnection(String url,String username,String password); //用於獲取連接對象.
/*
方法的形參的解釋:
url: 數據庫連接字符串
jdbc:mysql://localhost:3306/要操作的數據庫
jdbc:mysql://127.0.0.1:3306/操作的數據庫
格式:
協議:子協議://要鏈接的數據庫的IP或者主機名:端口號/要操作的數據庫
如果你操作的是本地服務器, 上述的方式可以優化爲:
jdbc:mysql:///操作的數據庫
username: 要操作的數據庫的 賬號
password: 要操作的數據庫的 密碼
*/
6. JDBC的API詳解之: Connection
Connection: 連接對象.
作用一: 用來獲取 可以執行SQL語句的對象. //掌握
public Statement createStatement(); //獲取可以執行SQL語句的對象.
public ResultSet executeQuery(String sql); //執行查詢語句
public int executeUpdate(String sql); //執行更新語句
public PreparedStatement prepareStatement(String sql); //獲取可以執行SQL語句的對象, 可以預編譯.
public ResultSet executeQuery(); //執行查詢語句
public int executeUpdate(); //執行更新語句
public void setXxx(int index,Xxx value); //給第index個佔位符賦值爲: value, 佔位符是從1開始數的.
作用二: 可以操作事務. //目前先理解.
public void setAutoCommit(boolean flag); //設置是否開啓事務的自動提交功能.
public void commit(); //提交事務
public void rollback(); //事務回滾
public void setTransactionIsolation(int level); //設置事務的隔離級別.
Connection接口中的常量: //目前理解即可
public static final int TRANSACTION_NONE = 0;
public static final int TRANSACTION_READ_UNCOMMITTED = 1;
public static final int TRANSACTION_READ_COMMITTED = 2;
public static final int TRANSACTION_REPEATABLE_READ = 4;
public static final int TRANSACTION_SERIALIZABLE = 8;
7. JDBC的API詳解之: Statement
Statement: 可以執行SQL語句的對象.
作用一: 用於執行SQL語句. //掌握
public ResultSet executeQuery(String sql); //執行查詢語句
public int executeUpdate(String sql); //執行更新語句
作用二: 可以執行批處理. //目前先了解即可, 批處理只針對 更新語句.
public void addBatch(String sql); //把SQL語句添加到指定的批處理中.
public int[] executeBatch(); //執行批處理.
public void clearBatch(); //清空批處理.
8. JDBC的API詳解之: ResultSet
ResultSet: 結果集對象, 表示的是: 查詢語句執行後的結果.
public boolean next(); //判斷結果集中是否還有 數據, 類似於我們之前學習集合時候的: hasNext().
public Xxx getXxx(int colunmNumber); //根據給定的列的編號,獲取該列的值. Xxx表示數據類型, 列的編號從1開始.
public Xxx getXxx(String colunmName); //根據給定的列的名字,獲取該列的值. Xxx表示數據類型.
9. JDBC釋放資源的優化代碼. //重點掌握.
10. JDBCUtils工具類的抽取.
方式一: 普通抽取.
public class JDBCUtils {
//私有構造
private JDBCUtils() {}
//通過靜態代碼塊, 來註冊驅動
static {
try{
Class.forName("com.mysql.jdbc.Driver");
} catch(Exception e){
e.printStackTrace(); //異常的描述信息, 異常的類型, 異常出現的位置.
}
}
//獲取連接對象
public static Connection getConnection() {
return...
}
//釋放資源
public static void release(Connection conn,Statement stat, ResultSet rs) {
}
//釋放資源
public static void release(Connection conn,Statement stat) {
}
}
方式二: 結合配置文件使用. //Properties
Properties: 集合類, 是一個雙列集合, 鍵值都是String類型, 它是Hashtable集合類的子類.
//記憶: 它是唯一一個可以直接和IO流相結合使用的 集合類.
public void load(InputStream is); //可以從流(文件)中讀取數據.
public void store(OutputStream os); //可以寫數據到流(文件)中.
11. SQL注入攻擊.
概述: 實際開發中, 如果SQL語句中的部分內容是要求用戶鍵盤錄入的, 這個時候如果用戶錄入了我們不想要的數據,
就有可能引發安全問題, 這個安全問題就是: SQL注入攻擊問題.
//SQL注入攻擊, SQL豬肉攻擊.
JDBC上_數據庫連接
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.