
??????教程全知識點(diǎn)簡介:MySQL基礎(chǔ) 1,數(shù)據(jù)庫相關(guān)概念 2,MySQL 3,SQL概述 4,DDL:操作數(shù)據(jù)庫 6,navicat使用 7,DML mysql高級 1,約束 2,數(shù)據(jù)庫設(shè)計 創(chuàng)建部門表 4,事務(wù) JDBC 1,JDBC概述 2,JDBC快速入門 3,JDBC API詳解 4,數(shù)據(jù)庫連接池 Getting Started Mybatis練習(xí) 1,配置文件實(shí)現(xiàn)CRUD HTML&CSS 1,HTML 2,CSS JavaScript 5,BOM 9,RegExp對象 HTTP&Tomcat&Servlet 1,Web概述 2, HTTP 3, Tomcat 4, Servlet 一、狀態(tài)碼大類 二、常見的響應(yīng)狀態(tài)碼 Contributing to Apache Tomcat Code of Conduct How Can I Contribute? 1,Request和Response的概述 2,Request對象 JSP 3,JSP 原理 5,EL 表達(dá)式 6,JSTL標(biāo)簽 會話技術(shù) 1,會話跟蹤技術(shù)的概述 2,Cookie 3,Session 4,用戶登錄注冊案例 Filter&Listener&Ajax 1,F(xiàn)ilter 2,Listener 3,Ajax 4,axios 5,JSON 6,案例 VUE&Element 1,VUE 3,綜合案例 1,功能介紹 2,環(huán)境準(zhǔn)備 3,查詢所有功能 4,添加功能 6,批量刪除 7,分頁查詢

????倉庫code.zip ??直接-->:???https://gitee.com/xiaoshuai112/Backend/blob/master/Java/嘿馬JavaWeb全技術(shù)開發(fā)/note.md ???????
? 本教程項(xiàng)目亮點(diǎn)
?? 知識體系完整:覆蓋從基礎(chǔ)原理、核心方法到高階應(yīng)用的全流程內(nèi)容
?? 全技術(shù)鏈覆蓋:完整前后端技術(shù)棧,涵蓋開發(fā)必備技能
?? 從零到實(shí)戰(zhàn):適合 0 基礎(chǔ)入門到提升,循序漸進(jìn)掌握核心能力
?? 豐富文檔與代碼示例:涵蓋多種場景,可運(yùn)行、可復(fù)用
?? 工作與學(xué)習(xí)雙參考:不僅適合系統(tǒng)化學(xué)習(xí),更可作為日常開發(fā)中的查閱手冊
?? 模塊化知識結(jié)構(gòu):按知識點(diǎn)分章節(jié),便于快速定位和復(fù)習(xí)
?? 長期可用的技術(shù)積累:不止一次學(xué)習(xí),而是能伴隨工作與項(xiàng)目長期參考
??????全教程總章節(jié)


??????本篇主要內(nèi)容
JDBC
今日目標(biāo)
- 掌握J(rèn)DBC的的CRUD
- 理解JDBC中各個對象的作用
- 掌握Druid的使用
1,JDBC概述
在開發(fā)中 使用的是java語言,那么勢必要通過java語言操作數(shù)據(jù)庫中的數(shù)據(jù)。這就是接下來要學(xué)習(xí)的JDBC。
1.1 JDBC概念
JDBC 就是使用Java語言操作關(guān)系型數(shù)據(jù)庫的一套API
全稱:( Java DataBase Connectivity ) Java 數(shù)據(jù)庫連接
<img src="https://upload-images.jianshu.io/upload_images/29644671-f4dfc7c9067a31ca.png" alt="image-20210725130537815" style="zoom:80%;" />
開發(fā)的同一套Java代碼是無法操作不同的關(guān)系型數(shù)據(jù)庫,因?yàn)槊恳粋€關(guān)系型數(shù)據(jù)庫的底層實(shí)現(xiàn)細(xì)節(jié)都不一樣。如果這樣,問題就很大了,在公司中可以在開發(fā)階段使用的是MySQL數(shù)據(jù)庫,而上線時公司最終選用oracle數(shù)據(jù)庫, 就需要對代碼進(jìn)行大批量修改,這顯然并不是 想看到的。 要做到的是同一套Java代碼操作不同的關(guān)系型數(shù)據(jù)庫,而此時sun公司就指定了一套標(biāo)準(zhǔn)接口(JDBC),JDBC中定義了所有操作關(guān)系型數(shù)據(jù)庫的規(guī)則。眾所周知接口是無法直接使用的, 需要使用接口的實(shí)現(xiàn)類,而這套實(shí)現(xiàn)類(稱之為:驅(qū)動)就由各自的數(shù)據(jù)庫廠商給出。
1.2 JDBC本質(zhì)
- 官方(sun公司)定義的一套操作所有關(guān)系型數(shù)據(jù)庫的規(guī)則,即接口
- 各個數(shù)據(jù)庫廠商去實(shí)現(xiàn)這套接口,提供數(shù)據(jù)庫驅(qū)動jar包
- 可以使用這套接口(JDBC)編程,真正執(zhí)行的代碼是驅(qū)動jar包中的實(shí)現(xiàn)類
1.3 JDBC好處
- 各數(shù)據(jù)庫廠商使用相同的接口,Java代碼不需要針對不同數(shù)據(jù)庫分別開發(fā)
- 可隨時替換底層數(shù)據(jù)庫,訪問數(shù)據(jù)庫的Java代碼基本不變
以后編寫操作數(shù)據(jù)庫的代碼只需要面向JDBC(接口),操作哪兒個關(guān)系型數(shù)據(jù)庫就需要導(dǎo)入該數(shù)據(jù)庫的驅(qū)動包,如需要操作MySQL數(shù)據(jù)庫,就需要再項(xiàng)目中導(dǎo)入MySQL數(shù)據(jù)庫的驅(qū)動包。如下圖就是MySQL驅(qū)動包
<img src="https://upload-images.jianshu.io/upload_images/29644671-c26527d231310453.png" alt="image-20210725133015535" style="zoom:90%;" />
2,JDBC快速入門
先來看看通過Java操作數(shù)據(jù)庫的流程
<img src="https://upload-images.jianshu.io/upload_images/29644671-8ca73806c83b8530.png" alt="image-20210725163745153" style="zoom:80%;" />
第一步:編寫Java代碼
第二步:Java代碼將SQL發(fā)送到MySQL服務(wù)端
第三步:MySQL服務(wù)端接收到SQL語句并執(zhí)行該SQL語句
第四步:將SQL語句執(zhí)行的結(jié)果返回給Java代碼
2.1 編寫代碼步驟
-
創(chuàng)建工程,導(dǎo)入驅(qū)動jar包
<img src="https://upload-images.jianshu.io/upload_images/29644671-c26527d231310453.png" alt="image-20210725133015535" style="zoom:90%;" />
注冊驅(qū)動
Class.forName("com.mysql.jdbc.Driver");
-
獲取連接
Connection conn = DriverManager.getConnection(url, username, password);Java代碼需要發(fā)送SQL給MySQL服務(wù)端,就需要先建立連接
-
定義SQL語句
String sql = “update…” ; 獲取執(zhí)行SQL對象
執(zhí)行SQL語句需要SQL執(zhí)行對象,而這個執(zhí)行對象就是Statement對象
Statement stmt = conn.createStatement();
-
執(zhí)行SQL
stmt.executeUpdate(sql); 處理返回結(jié)果
釋放資源
2.2 具體操作
- 創(chuàng)建新的空的項(xiàng)目
<img src="https://upload-images.jianshu.io/upload_images/29644671-f6db4b3f7867188c.png" alt="image-20210725165156501" style="zoom:70%;" />
- 定義項(xiàng)目的名稱,并指定位置
<img src="" alt="image-20210725165220829" style="zoom:70%;" />
- 對項(xiàng)目進(jìn)行設(shè)置,JDK版本、編譯版本
<img src="https://upload-images.jianshu.io/upload_images/29644671-54312a4682f9e4ef.png" alt="image-20210725165349564" style="zoom:70%;" />
- 創(chuàng)建模塊,指定模塊的名稱及位置
<img src="https://upload-images.jianshu.io/upload_images/29644671-9acee0923d8d0442.png" alt="image-20210725165536898" style="zoom:70%;" />
-
導(dǎo)入驅(qū)動包
將mysql的驅(qū)動包放在模塊下的lib目錄(隨意命名)下,并將該jar包添加為庫文件
<img src="" alt="image-20210725165657556" style="zoom:80%;" />
- 在添加為庫文件的時候,有如下三個選項(xiàng)
- Global Library : 全局有效
- Project Library : 項(xiàng)目有效
- Module Library : 模塊有效
<img src="https://upload-images.jianshu.io/upload_images/29644671-0ef2550f68f63c6b.png" alt="image-20210725165751273" style="zoom:80%;" />
- 在src下創(chuàng)建類
<img src="https://upload-images.jianshu.io/upload_images/29644671-cd6f506a89222c4f.png" alt="image-20210725170004319" style="zoom:70%;" />
- 編寫代碼如下
/**
* JDBC快速入門
*/
public class JDBCDemo {
public static void main(String[] args) throws Exception {
//1. 注冊驅(qū)動
//Class.forName("com.mysql.jdbc.Driver");
//2. 獲取連接
String url = "jdbc:mysql://127.0.0.1:3306/db1";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url, username, password);
//3. 定義sql
String sql = "update account set money = 2000 where id = 1";
//4. 獲取執(zhí)行sql的對象 Statement
Statement stmt = conn.createStatement();
//5. 執(zhí)行sql
int count = stmt.executeUpdate(sql);//受影響的行數(shù)
//6. 處理結(jié)果
System.out.println(count);
//7. 釋放資源
stmt.close();
conn.close();
}
}
3,JDBC API詳解
3.1 DriverManager
DriverManager(驅(qū)動管理類)作用:
-
注冊驅(qū)動
registerDriver方法是用于注冊驅(qū)動的,但是 之前做的入門案例并不是這樣寫的。而是如下實(shí)現(xiàn)
Class.forName("com.mysql.jdbc.Driver");查詢MySQL提供的Driver類,看它是如何實(shí)現(xiàn)的,源碼如下:
<img src="https://upload-images.jianshu.io/upload_images/29644671-333e63089361dcf2.png" alt="image-20210725171635432" style="zoom:70%;" />
在該類中的靜態(tài)代碼塊中已經(jīng)執(zhí)行了
DriverManager對象的registerDriver()方法進(jìn)行驅(qū)動的注冊了,那么 只需要加載Driver類,該靜態(tài)代碼塊就會執(zhí)行。而Class.forName("com.mysql.jdbc.Driver");就可以加載Driver類。==提示:==
- MySQL 5之后的驅(qū)動包,可以省略注冊驅(qū)動的步驟
- 自動加載jar包中META-INF/services/java.sql.Driver文件中的驅(qū)動類
-
獲取數(shù)據(jù)庫連接
參數(shù)說明:
-
url : 連接路徑
語法:jdbc:mysql://ip地址(域名):端口號/數(shù)據(jù)庫名稱?參數(shù)鍵值對1&參數(shù)鍵值對2…
示例:jdbc:mysql://127.0.0.1:3306/db1
==細(xì)節(jié):==
如果連接的是本機(jī)mysql服務(wù)器,并且mysql服務(wù)默認(rèn)端口是3306,則url可以簡寫為:jdbc:mysql:///數(shù)據(jù)庫名稱?參數(shù)鍵值對
配置 useSSL=false 參數(shù),禁用安全連接方式,解決警告提示
user :用戶名
poassword :
-
3.2 Connection
Connection(數(shù)據(jù)庫連接對象)作用:
- 獲取執(zhí)行 SQL 的對象
- 管理事務(wù)
3.2.1 獲取執(zhí)行對象
-
普通執(zhí)行SQL對象
Statement createStatement()
入門案例中就是通過該方法獲取的執(zhí)行對象。
-
預(yù)編譯SQL的執(zhí)行SQL對象:防止SQL注入
PreparedStatement prepareStatement(sql)通過這種方式獲取的
PreparedStatementSQL語句執(zhí)行對象是 一會重點(diǎn)要進(jìn)行講解的,它可以防止SQL注入。 執(zhí)行存儲過程的對象
CallableStatement prepareCall(sql)
通過這種方式獲取的 CallableStatement 執(zhí)行對象是用來執(zhí)行存儲過程的,而存儲過程在MySQL中不常用,所以這個 將不進(jìn)行講解。
3.2.2 事務(wù)管理
先回顧一下MySQL事務(wù)管理的操作:
- 開啟事務(wù) : BEGIN; 或者 START TRANSACTION;
- 提交事務(wù) : COMMIT;
- 回滾事務(wù) : ROLLBACK;
MySQL默認(rèn)是自動提交事務(wù)
接下來學(xué)習(xí)JDBC事務(wù)管理的方法。
Connection幾口中定義了3個對應(yīng)的方法:
-
開啟事務(wù)
參與autoCommit 表示是否自動提交事務(wù),true表示自動提交事務(wù),false表示手動提交事務(wù)。而開啟事務(wù)需要將該參數(shù)設(shè)為為false。
-
提交事務(wù)
-
回滾事務(wù)
具體代碼實(shí)現(xiàn)如下:




