【MySQL探索之旅】JDBC (Java連接MySQL數據庫)

封面

📚博客主頁:愛敲代碼的小楊.

?專欄:《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 數據庫連接
image-20210725130537815.png
我們開發的同一套Java代碼是無法操作不同的關系型數據庫,因為每一個關系型數據庫的底層實現細節都不一樣。如果這樣,問題就很大了,在公司中可以在開發階段使用的是MySQL數據庫,而上線時公司最終選用oracle數據庫,我們就需要對代碼進行大批量修改,這顯然并不是我們想看到的。我們要做到的是同一套Java代碼操作不同的關系型數據庫,而此時sun公司就指定了一套標準接口(JDBC),JDBC中定義了所有操作關系型數據庫的規則。眾所周知接口是無法直接使用的,我們需要使用接口的實現類,而這套實現類(稱之為:驅動)就由各自的數據庫廠商給出。

1.2 JDBC 的本質

  • 官方(sun公司)定義的一套操作所有關系型數據庫的規則,即接口
  • 各個數據庫廠商去實現這套接口,提供數據庫驅動 jar
  • 我們可以使用這套接口(JDBC)編程,真正執行的代碼是驅動 jar 包中的實現類

1.3 JDBC 的好處

  • 各數據庫廠商使用相同的接口,Java代碼不需要針對不同數據庫分別開發
  • 可隨時替換底層數據庫,訪問數據庫的Java代碼基本不變

以后編寫操作數據庫的代碼只需要面向JDBC(接口),操作哪兒個關系型數據庫就需要導入該數據庫的驅動包,如需要操作MySQL數據庫,就需要再項目中導入MySQL數據庫的驅動包。(關注文末的公眾號回復:MySQL即可獲取驅動包)
image.png

2. JDBC 的使用

Java 操作數據庫的流程
image.png

2.1 編寫代碼的步驟

  1. 創建工程, 導入驅動 jar

image.png
添加庫
image.png
image.png

  1. 創建數據源(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("你的密碼");
  1. 連接數據庫服務器
// 2. 連接數據庫服務器
Connection connection = dataSource.getConnection();
  1. 構造操作數據庫的 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);
  1. 執行 SQL 語句
int n = preparedStatement.executeUpdate();
System.out.println("n = " + n);
  1. 釋放資源
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();}
}

運行結果:
image.png
image.png

3. JDBC 常用類和接口

3.1 JDBC API

在Java JDBC編程中對數據庫的操作均使用JDK自帶的API統一處理,通常與特定數據庫的驅動類是完全解耦的。所以掌握 Java JDBC API (位于 java.sql 包下) 即可掌握 Java 數據庫編程。

3.2 Connection

Connection接口實現類由數據庫提供,獲取 Connection對象通常有兩種方式:

  1. 一種是通過 DriverManager(驅動管理類)的靜態方法獲取:
// 加載 JDBC 驅動程序
Class.forName("com.mysql.jdbc.Driver");// 創建數據庫連接
Connection connection = DriverManager.getConnection(url);
  1. 一種是通過 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");

區別:

  1. DriverManager類來獲取的 Connection 連接,是無法重復利用的,每次使用完以后釋放資源時,通過 connection.close()都是關閉物理連接。
  2. DataSource提供連接池的支持。連接池在初始化時將創建一定數量的數據庫連接,這些連接是可以復用的,每次使用完數據庫連接,釋放資源調用 connection.close()都是將 Conncetion連接對象回收。

3.3 Statement

Statement對象主要是將SQL語句發送到數據庫中。JDBC API中主要提供了三種Statement對象。
image.png
實際開發中最常用的是 PreparedStatement對象
總結:
image.png
主要掌握兩種執行 SQL 的方法:

  1. executeQuery() 方法執行后返回單個結果集的,通常用于 select語句
  2. executeUpdate()方法返回值是一個整數,指示受影響的行數,通常用于updateinsertdelete語句

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11366.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11366.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11366.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

探索免費靜態IP海外的奧秘

在數字化時代,網絡資源的獲取和利用對于個人和企業都至關重要。其中,獨立靜態IP地址更是因其穩定性和安全性備受青睞。本文將帶您深入了解“免費的獨立靜態IP海外”的奧秘,探討其背后的原理、優勢、獲取途徑以及使用場景。 一、獨立靜態IP的基…

XEChat-Idea:摸魚神器!!【送源碼】

XEChat-Idea ? 基于Netty的IDEA即時聊天插件 ? 項目介紹 主要功能: 即時聊天 游戲對戰 即時聊天 idea摸魚工具 idea斗地主 項目結構 . ├── LICENSE ├── README.md ├── xechat-commons //公共模塊 │ ├── pom.xml │ └── src ├── xech…

文本分類的深度注意圖擴散網絡 筆記

1 Title Deep Attention Diffusion Graph Neural Networks for Text Classification(Yonghao Liu、Renchu Guan、Fausto Giunchiglia、Yanchun Liang、Xiaoyue Feng)【EMnlp 2021】 2 Conclusion Text classification is a fundamental task with broad…

Linux-- 重定向緩沖區

目錄 0.接上篇文章 1.粗略的見一下這兩個問題 2.理解重定向 3.理解緩沖區 0.接上篇文章 Linux--基礎IO(文件描述符fd)-CSDN博客 1.粗略的見一下這兩個問題 先來了解幾個函數: stat()函數用于獲取指定文件或符號鏈接的元數據。如果文件是…

Android 系統省電軟件分析

1、硬件耗電 主要有: 1、屏幕 2、CPU 3、WLAN 4、感應器 5、GPS(目前我們沒有) 電量其實是目前手持設備最寶貴的資源之一,大多數設備都需要不斷的充電來維持繼續使用。不幸的是,對于開發者來說,電量優化是他們最后才會考慮的的事情…

排序實現題目:排序數組

文章目錄 題目標題和出處難度題目描述要求示例數據范圍 前言冒泡排序原理示例代碼復雜度分析穩定性分析 選擇排序原理示例代碼復雜度分析穩定性分析 插入排序原理示例代碼復雜度分析穩定性分析 希爾排序原理示例代碼復雜度分析穩定性分析 歸并排序原理示例代碼復雜度分析穩定性…

Jackson如何禁止在反序列化字符串為對應java bean時,字符串中的null被反序列成為NullNode

直接說應用場景,json文件中有一個如下配置: [{"name":"John Doe","age":28,"jsonNode":null},{"name":"John1","age":31}] 待反序列化類定義如下所示: @Data static class TestClass {/*** 名字.*…

【C++】詳解STL的適配器容器之一:優先級隊列 priority_queue

目錄 堆算法 概述 向下調整建堆 向上調整建堆 建堆算法 仿函數 概述 使用介紹 emtpy size top push pop 模擬實現 仿函數 框架 向下調整算法 向上調整算法 pop push empty top 要理解優先級隊列,需要有如下知識 STL容器之一的vector&#xf…

聚類分析 | 基于GA遺傳算法優化kmeans聚類(Matlab)

聚類分析 | 基于GA遺傳算法優化kmeans聚類(Matlab) 目錄 聚類分析 | 基于GA遺傳算法優化kmeans聚類(Matlab)效果一覽基本介紹程序設計參考資料 效果一覽 基本介紹 GA-kmeans聚類算法,通過GA遺傳算法優化kmeans聚類&…

序列化的不同格式:JSON、XML、TOML、CSON、YAML

前言 這篇文章參考于知乎,進行了一些總結。 正文 首先什么是序列化,數據序列化是從一個系統獲取一些信息,將其轉換為其它系統可以讀取的格式,然后將其傳遞給其它系統的過程。也就是可以讓不同系統“通信”。 序列化需要滿足兩…

JetPack Compose Navigation

1. 導入依賴 implementation("androidx.navigation:navigation-compose:2.7.7") 2.kotlin編譯版本升級 composeOptions {kotlinCompilerExtensionVersion "1.5.0"} 3.插件版本升級 // Top-level build file where you can add configuration options c…

學習筆記:IEEE 1003.13-2003【POSIX PSE51接口列表】

一、POSIX PSE51接口列表 根據IEEE 1003.13-2003,整理了POSIX PSE51接口API(一共286個),每個API支持鏈接查看。 IEEE POSIX接口online搜索鏈接: The Open Group Base Specifications Issue 7, 2018 edition 詳細內…

【python】模塊與包

Python中的模塊和包是組織和管理代碼的重要工具。通過模塊和包,你可以更好地管理和重用你的代碼,使得代碼更加模塊化和可維護。 目錄 前言 正文 一、模塊 1、模塊的分類 1)內置模塊 python解釋器中默認擁有的模塊可以直接使用(…

用戶需求甄別和篩選的6大標準

產品經理日常經常接收到大量的需求,并不是所有的需求都需要開發,需要進行甄別和篩選,這樣有利于確保項目的成功、優化資源利用以及提高產品質量。 那么針對這些用戶需求進行甄別或篩選的評判標準是什么?需求篩選可以說是初步的需求…

代碼隨想錄-算法訓練營day31【貪心算法01:理論基礎、分發餅干、擺動序列、最大子序和】

代碼隨想錄-035期-算法訓練營【博客筆記匯總表】-CSDN博客 第八章 貪心算法 part01● 理論基礎 ● 455.分發餅干 ● 376. 擺動序列 ● 53. 最大子序和 貪心算法其實就是沒有什么規律可言,所以大家了解貪心算法 就了解它沒有規律的本質就夠了。 不用花心思去研究其…

C++牛客周賽題目分享(2)小紅叕戰小紫,小紅的數組移動,小紅的素數合并,小紅的子序列求和

目錄 ?編輯 1.前言 2.四道題目 1.小紅叕戰小紫 1.題目描述 2.輸入描述 3.輸出描述 4.示例 5.題解與思路 2.小紅的數組移動 1.題目描述 2.輸入描述 3.輸出描述 4.示例 5.題解與思路 3.小紅的素數合并 1.題目描述 2.輸入描述 3.輸出描述 4.示例 5.題解與思…

增強For循環執行順序探究

增強For循環執行順序探究 增強For循環基礎執行順序探討對于數組對于集合 經典示例數組示例集合示例(ArrayList) 注意事項結論 在Java編程中,增強型for循環(也稱為“foreach”循環)是一種簡潔而強大的迭代集合或數組元素…

super

super 一、理解 super.屬性:在子類中,調用父類非私有化的成員屬性 super.方法:在子類中,調用父類非私有化的成員方法 super():在子類構造方法中調用父類非私有的構造方法 二、案例 需求:編寫中國人和日本人…

云原生新手和開源教育分論壇 01-Kubernetes 社區:從新手到影響者

2024年04月20日 上海KCD & Shanghai:https://community.cncf.io/events/details/cncf-kcd-shanghai-presents-kcd-shanghai-2024/視頻觀看:https://www.bilibili.com/video/BV1nD421T786/?spm_id_from333.999.0.0&vd_sourceae7b192be069682aabc…

【FreeRTOS 快速入門】-- 1、STM32工程移植FreeRTOS

目錄 一、新建STM32工程 為了示范完整的移植過程,我們從0開始,新建一個標準的STM32點燈工程。 (本篇以CubeMX作示范,CubeIDE操作近同,可作對比參考) 1、新建工程 選擇 芯片型號 新建工程 2、搜索芯片型號…