📚博客主頁:愛敲代碼的小楊.
?專欄:《Java SE語法》 | 《數據結構與算法》 | 《C生萬物》 |《MySQL探索之旅》 |《Web世界探險家》
??感謝大家點贊👍🏻收藏?評論?🏻,您的三連就是我持續更新的動力??
🙏小楊水平有限,歡迎各位大佬指點,相互學習進步!
文章目錄
- 1. JDBC 的概念
- 1.1 JDBC 的概念
- 1.2 JDBC 的本質
- 1.3 JDBC 的好處
- 2. JDBC 的使用
- 2.1 編寫代碼的步驟
- 3. JDBC 常用類和接口
- 3.1 JDBC API
- 3.2 Connection
- 3.3 Statement
1. JDBC 的概念
1.1 JDBC 的概念
JDBC : 就是使用 Java 語言操作關系型數據庫的一套 API
JDBC 全稱:( Java DataBase Connectivity ) Java 數據庫連接
我們開發的同一套Java代碼是無法操作不同的關系型數據庫,因為每一個關系型數據庫的底層實現細節都不一樣。如果這樣,問題就很大了,在公司中可以在開發階段使用的是MySQL數據庫,而上線時公司最終選用oracle數據庫,我們就需要對代碼進行大批量修改,這顯然并不是我們想看到的。我們要做到的是同一套Java代碼操作不同的關系型數據庫,而此時sun公司就指定了一套標準接口(JDBC),JDBC中定義了所有操作關系型數據庫的規則。眾所周知接口是無法直接使用的,我們需要使用接口的實現類,而這套實現類(稱之為:驅動)就由各自的數據庫廠商給出。
1.2 JDBC 的本質
- 官方(sun公司)定義的一套操作所有關系型數據庫的規則,即接口
- 各個數據庫廠商去實現這套接口,提供數據庫驅動
jar
包 - 我們可以使用這套接口(JDBC)編程,真正執行的代碼是驅動
jar
包中的實現類
1.3 JDBC 的好處
- 各數據庫廠商使用相同的接口,Java代碼不需要針對不同數據庫分別開發
- 可隨時替換底層數據庫,訪問數據庫的Java代碼基本不變
以后編寫操作數據庫的代碼只需要面向JDBC(接口),操作哪兒個關系型數據庫就需要導入該數據庫的驅動包,如需要操作MySQL數據庫,就需要再項目中導入MySQL數據庫的驅動包。(關注文末的公眾號回復:MySQL即可獲取驅動包)
2. JDBC 的使用
Java 操作數據庫的流程
2.1 編寫代碼的步驟
- 創建工程, 導入驅動
jar
包
添加庫
- 創建數據源(
DataSource
)
// 1. 創建數據源(DataSource)
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/你的數據名?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("你的用戶名");
((MysqlDataSource) dataSource).setPassword("你的密碼");
- 連接數據庫服務器
// 2. 連接數據庫服務器
Connection connection = dataSource.getConnection();
- 構造操作數據庫的 SQL 語句
System.out.println("請輸入id");
int id = input.nextInt();
System.out.println("請輸入姓名");
String name = input.next();;
String sql = "insert into 你的表名 values (?,?)"; // sql語句
PreparedStatement preparedStatement = connection.prepareStatement(sql); // 構造 "語句對象"
preparedStatement.setInt(1, id);
preparedStatement.setString(2, name);
- 執行 SQL 語句
int n = preparedStatement.executeUpdate();
System.out.println("n = " + n);
- 釋放資源
preparedStatement.close();
connection.close();
案例
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;public class JDBCDemo {public static void main(String[] args) throws SQLException {Scanner input = new Scanner(System.in);// 1. 創建數據源(DataSource)DataSource dataSource = new MysqlDataSource();((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java111?characterEncoding=utf8&useSSL=false");((MysqlDataSource) dataSource).setUser("root");((MysqlDataSource) dataSource).setPassword("1234");// 2. 連接數據庫服務器Connection connection = dataSource.getConnection();// 3. 構造操作數據庫的 SQL 語句System.out.println("請輸入id");int id = input.nextInt();System.out.println("請輸入姓名");String name = input.next();;String sql = "insert into test values (?,?)";PreparedStatement preparedStatement = connection.prepareStatement(sql); // 構造 "語句對象"preparedStatement.setInt(1, id);preparedStatement.setString(2, name);// 4. 執行 SQL語句int n = preparedStatement.executeUpdate();System.out.println("n = " + n);// 5. 釋放資源preparedStatement.close();connection.close();}
}
運行結果:
3. JDBC 常用類和接口
3.1 JDBC API
在Java JDBC編程中對數據庫的操作均使用JDK自帶的API統一處理,通常與特定數據庫的驅動類是完全解耦的。所以掌握 Java JDBC API (位于 java.sql
包下) 即可掌握 Java 數據庫編程。
3.2 Connection
Connection
接口實現類由數據庫提供,獲取 Connection
對象通常有兩種方式:
- 一種是通過
DriverManager
(驅動管理類)的靜態方法獲取:
// 加載 JDBC 驅動程序
Class.forName("com.mysql.jdbc.Driver");// 創建數據庫連接
Connection connection = DriverManager.getConnection(url);
- 一種是通過
DataSource
(數據源)對象獲取。實際應用中會使用DataSource
對象。
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java111?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("1234");
區別:
DriverManager
類來獲取的Connection
連接,是無法重復利用的,每次使用完以后釋放資源時,通過connection.close()
都是關閉物理連接。DataSource
提供連接池的支持。連接池在初始化時將創建一定數量的數據庫連接,這些連接是可以復用的,每次使用完數據庫連接,釋放資源調用connection.close()
都是將Conncetion
連接對象回收。
3.3 Statement
Statement
對象主要是將SQL語句發送到數據庫中。JDBC API中主要提供了三種Statement
對象。
實際開發中最常用的是 PreparedStatement
對象
總結:
主要掌握兩種執行 SQL 的方法:
executeQuery()
方法執行后返回單個結果集的,通常用于select
語句executeUpdate()
方法返回值是一個整數,指示受影響的行數,通常用于update
、insert
、delete
語句