JDBC学习笔记01【JDBC快速入门、JDBC各个类详解、JDBC之CRUD练习】
- 黑馬程序員-JDBC文檔(騰訊微云)JDBC筆記.pdf:https://share.weiyun.com/Kxy7LmRm
目錄
01 JDBC快速入門
今日內(nèi)容
JDBC_概念
JDBC_快速入門
驅(qū)動(dòng)jar包解析
IntelliJ IDEA 2017.3.4 x64 新建項(xiàng)目、新建模塊
Idea 新建包 不分級(jí) 解決方法
將 MySQL驅(qū)動(dòng)jar包 添加到 Idea項(xiàng)目 中
Idea 連接 MySQL數(shù)據(jù)庫(kù) 代碼
02 JDBC各個(gè)類詳解
Idea 導(dǎo)入 項(xiàng)目
JDBC各個(gè)類詳解_DriverManager
JDBC各個(gè)類詳解_DriverManager
DriverManager 獲取數(shù)據(jù)庫(kù)連接
JDBC各個(gè)類詳解_Connection
獲取執(zhí)行sql的對(duì)象
管理事務(wù)
JDBC各個(gè)類詳解_Statement
03 JDBC之CRUD練習(xí)
JDBC練習(xí)_insert語(yǔ)句
account表 添加一條記錄
JDBC練習(xí)_update語(yǔ)句
account表 修改記錄
JDBC練習(xí)_update、DDL語(yǔ)句
account表 刪除一條記錄
執(zhí)行DDL語(yǔ)句
?
01 JDBC快速入門
今日內(nèi)容
JDBC_概念
1. 概念:Java DataBase Connectivity ?Java 數(shù)據(jù)庫(kù)連接, Java語(yǔ)言操作數(shù)據(jù)庫(kù)
?? ?* JDBC本質(zhì):其實(shí)是官方(sun公司)定義的一套操作所有關(guān)系型數(shù)據(jù)庫(kù)的規(guī)則,即接口。各個(gè)數(shù)據(jù)庫(kù)廠商去實(shí)現(xiàn)這套接口,提供數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar包。我們可以使用這套接口(JDBC)編程,真正執(zhí)行的代碼是驅(qū)動(dòng)jar包中的實(shí)現(xiàn)類。
- Person 接口:eat()方法? ?Worker實(shí)現(xiàn)類? ? ??Person p = new Worker();?// 父類引用指向子類對(duì)象
- p.eat(); // 會(huì)調(diào)用Worker()實(shí)現(xiàn)類的eat方法,產(chǎn)生多態(tài)調(diào)用
- JDBC編程,以接口類型調(diào)用方法。導(dǎo)入驅(qū)動(dòng)jar包后,真正執(zhí)行的是驅(qū)動(dòng)jar包實(shí)現(xiàn)類對(duì)應(yīng)的實(shí)現(xiàn)方法。
JDBC_快速入門
2. 快速入門:
?? ?* 步驟:
?? ??? ?1. 導(dǎo)入驅(qū)動(dòng)jar包 mysql-connector-java-5.1.37-bin.jar
?? ??? ??? ?1.復(fù)制mysql-connector-java-5.1.37-bin.jar到項(xiàng)目的libs目錄下
?? ??? ??? ?2.右鍵-->Add As Library
?? ??? ?2. 注冊(cè)驅(qū)動(dòng)
?? ??? ?3. 獲取數(shù)據(jù)庫(kù)連接對(duì)象 Connection
?? ??? ?4. 定義sql
?? ??? ?5. 獲取執(zhí)行sql語(yǔ)句的對(duì)象 Statement
?? ??? ?6. 執(zhí)行sql,接受返回結(jié)果
?? ??? ?7. 處理結(jié)果
?? ??? ?8. 釋放資源
?? ?* 代碼實(shí)現(xiàn):
?? ? ??? //1. 導(dǎo)入驅(qū)動(dòng)jar包
? ? ? ? //2.注冊(cè)驅(qū)動(dòng)
? ? ? ? Class.forName("com.mysql.jdbc.Driver");
? ? ? ? //3.獲取數(shù)據(jù)庫(kù)連接對(duì)象
? ? ? ? Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
? ? ? ? //4.定義sql語(yǔ)句
? ? ? ? String sql = "update account set balance = 500 where id = 1";
? ? ? ? //5.獲取執(zhí)行sql的對(duì)象 Statement
? ? ? ? Statement stmt = conn.createStatement();
? ? ? ? //6.執(zhí)行sql
? ? ? ? int count = stmt.executeUpdate(sql);
? ? ? ? //7.處理結(jié)果
? ? ? ? System.out.println(count);
? ? ? ? //8.釋放資源
? ? ? ? stmt.close();
? ? ? ? conn.close();
驅(qū)動(dòng)jar包解析
??
??
IntelliJ IDEA 2017.3.4 x64 新建項(xiàng)目、新建模塊
??
??
新建模塊
??
??
Idea 新建包 不分級(jí) 解決方法
??
??
??
將 MySQL驅(qū)動(dòng)jar包 添加到 Idea項(xiàng)目 中
導(dǎo)入驅(qū)動(dòng)jar包 mysql-connector-java-5.1.37-bin.jar
?? ??? ??? ?1.復(fù)制mysql-connector-java-5.1.37-bin.jar到項(xiàng)目的libs目錄下
?? ??? ??? ?2.右鍵-->Add As Library
??
??
Idea 連接 MySQL數(shù)據(jù)庫(kù) 代碼
??
運(yùn)行文件JdbcDemo1.java文件,出現(xiàn)如下信息(百度查了一下,可能電腦內(nèi)存不夠...),重新點(diǎn)擊運(yùn)行按鈕,又好了。
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 1048576 bytes for AllocateHeap
# An error report file with more information is saved as:
# F:\JetBrains\1ideaSpace\itcast\hs_err_pid2904.log
02 JDBC各個(gè)類詳解
Idea 導(dǎo)入 項(xiàng)目
??
??
??
??
??
JDBC各個(gè)類詳解_DriverManager
3. 詳解各個(gè)對(duì)象:
?? ?1. DriverManager:驅(qū)動(dòng)管理對(duì)象
?? ??? ?* 功能:
?? ??? ??? ?1. 注冊(cè)驅(qū)動(dòng):告訴程序該使用哪一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar包
?? ??? ??? ??? ?static void registerDriver(Driver driver) :注冊(cè)與給定的驅(qū)動(dòng)程序 DriverManager 。?
?? ??? ??? ??? ?寫代碼使用: ?Class.forName("com.mysql.jdbc.Driver");
?? ??? ??? ??? ?通過(guò)查看源碼發(fā)現(xiàn):在com.mysql.jdbc.Driver類中存在靜態(tài)代碼塊
?? ??? ??? ??? ? static {
?? ??? ??? ??? ? ? ? ? ?try {
?? ??? ??? ??? ? ? ? ? ? ? ?java.sql.DriverManager.registerDriver(new Driver());
?? ??? ??? ??? ? ? ? ? ?} catch (SQLException E) {
?? ??? ??? ??? ? ? ? ? ? ? ?throw new RuntimeException("Can't register driver!");
?? ??? ??? ??? ? ? ? ? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?注意:mysql5之后的驅(qū)動(dòng)jar包可以省略注冊(cè)驅(qū)動(dòng)的步驟。
?? ??? ??? ?2. 獲取數(shù)據(jù)庫(kù)連接
?? ?2. Connection:數(shù)據(jù)庫(kù)連接對(duì)象
?? ?3. Statement:執(zhí)行sql的對(duì)象
?? ?4. ResultSet:結(jié)果集對(duì)象,封裝查詢結(jié)果
JDBC各個(gè)類詳解_DriverManager
3. 詳解各個(gè)對(duì)象:
?? ?1. DriverManager:驅(qū)動(dòng)管理對(duì)象
?? ??? ?* 功能:
?? ??? ??? ?1. 注冊(cè)驅(qū)動(dòng):告訴程序該使用哪一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)jar包
?? ??? ??? ??? ?static void registerDriver(Driver driver) :注冊(cè)與給定的驅(qū)動(dòng)程序 DriverManager 。?
?? ??? ??? ??? ?寫代碼使用: ?Class.forName("com.mysql.jdbc.Driver");
?? ??? ??? ??? ?通過(guò)查看源碼發(fā)現(xiàn):在com.mysql.jdbc.Driver類中存在靜態(tài)代碼塊
?? ??? ??? ??? ? static {
?? ??? ??? ??? ? ? ? ? ?try {
?? ??? ??? ??? ? ? ? ? ? ? ?java.sql.DriverManager.registerDriver(new Driver());
?? ??? ??? ??? ? ? ? ? ?} catch (SQLException E) {
?? ??? ??? ??? ? ? ? ? ? ? ?throw new RuntimeException("Can't register driver!");
?? ??? ??? ??? ? ? ? ? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?注意:mysql5之后的驅(qū)動(dòng)jar包可以省略注冊(cè)驅(qū)動(dòng)的步驟。
?? ??? ??? ?2. 獲取數(shù)據(jù)庫(kù)連接:
?? ??? ??? ??? ?* 方法:static Connection getConnection(String url, String user, String password)?
?? ??? ??? ??? ?* 參數(shù):
?? ??? ??? ??? ??? ?* url:指定連接的路徑
?? ??? ??? ??? ??? ??? ?* 語(yǔ)法:jdbc:mysql://ip地址(域名):端口號(hào)/數(shù)據(jù)庫(kù)名稱
?? ??? ??? ??? ??? ??? ?* 例子:jdbc:mysql://localhost:3306/db3
?? ??? ??? ??? ??? ??? ?* 細(xì)節(jié):如果連接的是本機(jī)mysql服務(wù)器,并且mysql服務(wù)默認(rèn)端口是3306,則url可以簡(jiǎn)寫為:jdbc:mysql:///數(shù)據(jù)庫(kù)名稱
?? ??? ??? ??? ??? ?* user:用戶名
?? ??? ??? ??? ??? ?* password:密碼
DriverManager 獲取數(shù)據(jù)庫(kù)連接
jdbc:mysql://ip地址(域名):端口號(hào)/數(shù)據(jù)庫(kù)名稱,端口號(hào):找到計(jì)算機(jī)上安裝的MySQL服務(wù)器。
JDBC各個(gè)類詳解_Connection
?? ?2. Connection:數(shù)據(jù)庫(kù)連接對(duì)象(代表了當(dāng)前代碼和數(shù)據(jù)庫(kù)之間的橋梁)。
?? ??? ?1. 功能:
?? ??? ??? ?1. 獲取執(zhí)行sql 的對(duì)象
?? ??? ??? ??? ?* Statement createStatement()
?? ??? ??? ??? ?* PreparedStatement prepareStatement(String sql) ?
?? ??? ??? ?2. 管理事務(wù):
?? ??? ??? ??? ?* 開啟事務(wù):setAutoCommit(boolean autoCommit) :調(diào)用該方法設(shè)置參數(shù)為false,即開啟事務(wù)
?? ??? ??? ??? ?* 提交事務(wù):commit()?
?? ??? ??? ??? ?* 回滾事務(wù):rollback()?
獲取執(zhí)行sql的對(duì)象
管理事務(wù)
事務(wù):
JDBC各個(gè)類詳解_Statement
?? ?3. Statement:執(zhí)行sql的對(duì)象
?? ??? ?1. 執(zhí)行sql
?? ??? ??? ?1. boolean execute(String sql) :可以執(zhí)行任意的sql(了解)
?? ??? ??? ?2. int executeUpdate(String sql) :執(zhí)行DML(insert、update、delete)語(yǔ)句、DDL(create、alter、drop)語(yǔ)句
?? ??? ??? ??? ?* 返回值:影響的行數(shù),可以通過(guò)這個(gè)影響的行數(shù)判斷DML語(yǔ)句是否執(zhí)行成功。返回值>0,則執(zhí)行成功;反之,則失敗。
?? ??? ??? ?3. ResultSet executeQuery(String sql) :執(zhí)行DQL(select)語(yǔ)句
03 JDBC之CRUD練習(xí)
JDBC練習(xí)_insert語(yǔ)句
?? ?3. Statement:執(zhí)行sql的對(duì)象
?? ??? ?1. 執(zhí)行sql
?? ??? ??? ?1. boolean execute(String sql) :可以執(zhí)行任意的sql 了解?
?? ??? ??? ?2. int executeUpdate(String sql) :執(zhí)行DML(insert、update、delete)語(yǔ)句、DDL(create,alter、drop)語(yǔ)句
?? ??? ??? ??? ?* 返回值:影響的行數(shù),可以通過(guò)這個(gè)影響的行數(shù)判斷DML語(yǔ)句是否執(zhí)行成功 返回值>0的則執(zhí)行成功,反之,則失敗。
?? ??? ??? ?3. ResultSet executeQuery(String sql) ?:執(zhí)行DQL(select)語(yǔ)句
?? ??? ?2. 練習(xí):
?? ??? ??? ?1. account表 添加一條記錄
?? ??? ??? ?2. account表 修改記錄
?? ??? ??? ?3. account表 刪除一條記錄
?? ??? ??? ?代碼:...
account表 添加一條記錄
??
package cn.itcast.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;/*** account表 添加一條記錄 insert 語(yǔ)句*/ public class JDBCDemo2 {public static void main(String[] args) {Statement stmt = null;Connection conn = null;try {//1. 注冊(cè)驅(qū)動(dòng)Class.forName("com.mysql.jdbc.Driver");//2. 定義sqlString sql = "insert into account values(null,'王五',3000)";//3.獲取Connection對(duì)象conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");//4.獲取執(zhí)行sql的對(duì)象 Statementstmt = conn.createStatement();//5.執(zhí)行sqlint count = stmt.executeUpdate(sql);//影響的行數(shù)//6.處理結(jié)果System.out.println(count);if (count > 0) {System.out.println("添加成功!");} else {System.out.println("添加失敗!");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {//stmt.close();//7. 釋放資源//避免空指針異常if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}} }JDBC練習(xí)_update語(yǔ)句
account表 修改記錄
package cn.itcast.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;/*** account表 修改記錄*/ public class JDBCDemo3 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;try {//1.注冊(cè)驅(qū)動(dòng)Class.forName("com.mysql.jdbc.Driver");//2.獲取連接對(duì)象conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");//3.定義sqlString sql = "update account set balance = 1500 where id = 3";//4.獲取執(zhí)行sql對(duì)象stmt = conn.createStatement();//5.執(zhí)行sqlint count = stmt.executeUpdate(sql);//6.處理結(jié)果System.out.println(count);if (count > 0) {System.out.println("修改成功!");} else {System.out.println("修改失敗!");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {//7.釋放資源if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}} }JDBC練習(xí)_update、DDL語(yǔ)句
account表 刪除一條記錄
package cn.itcast.jdbc;import cn.itcast.util.JDBCUtils;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;/*** account表 刪除一條記錄*/ public class JDBCDemo4 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;try {//1. 注冊(cè)驅(qū)動(dòng)Class.forName("com.mysql.jdbc.Driver");//2.獲取連接對(duì)象conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");//conn = JDBCUtils.getConnection("jdbc:mysql:///db3", "root", "root");//3.定義sqlString sql = "delete from account where id = 3";//4.獲取執(zhí)行sql對(duì)象stmt = conn.createStatement();//5.執(zhí)行sqlint count = stmt.executeUpdate(sql);//6.處理結(jié)果System.out.println(count);if (count > 0) {System.out.println("刪除成功!");} else {System.out.println("刪除失敗!");}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {//7.釋放資源if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}} }執(zhí)行DDL語(yǔ)句
package cn.itcast.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;/*** 執(zhí)行DDL語(yǔ)句*/ public class JDBCDemo5 {public static void main(String[] args) {Connection conn = null;Statement stmt = null;try {//1. 注冊(cè)驅(qū)動(dòng)Class.forName("com.mysql.jdbc.Driver");//2.獲取連接對(duì)象conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");//3.定義sqlString sql = "create table student (id int, name varchar(20))";//4.獲取執(zhí)行sql對(duì)象stmt = conn.createStatement();//5.執(zhí)行sqlint count = stmt.executeUpdate(sql);//6.處理結(jié)果System.out.println(count);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {//7.釋放資源if (stmt != null) {try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}} }加油,趕緊學(xué),寧死不玩~
總結(jié)
以上是生活随笔為你收集整理的JDBC学习笔记01【JDBC快速入门、JDBC各个类详解、JDBC之CRUD练习】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL学习笔记07【事务、用户管理和
- 下一篇: JDBC学习笔记02【ResultSet