基于 JDBC 的后端與 MySQL 數據庫交互 javaweb

一、了解JDBC

二、添加MySQL的JDBC驅動包

三、使用JDBC連接數據庫應用🔗

3.1創建一個包

3.2?查找實例

?3.3?修改添加刪除實例

四、封裝?📦

DBConnection.java

MysqlUtil.java

?測試使用一下

測試1

測試2?


????????在后端開發中,與數據庫進行交互是非常常見的需求。MySQL 作為一種廣泛使用的開源關系型數據庫,提供了強大的數據存儲和管理能力。熟悉Navicat Premium -CSDN博客? 在上一篇博客中已經了解了這個管理數據庫的工具,那么如何在后端與Mysql進行交互呢????

一、了解JDBC

????????JDBC(Java Database Connectivity)是 Java 用于連接和操作數據庫的標準化接口 。它提供了一套用于與數據庫進行交互的 API(應用程序編程接口),允許 Java 程序通過 SQL 語句與數據庫進行通信,執行諸如查詢、插入、更新和刪除等操作。
  • 在實際開發中,企業可能會使用多種不同的數據庫(如 MySQL、Oracle、SQL Server 等)。如果沒有一個統一的接口,開發者需要為每種數據庫編寫不同的代碼,這不僅增加了開發成本,還降低了代碼的可移植性。
  • JDBC 提供了一套標準化的 API使得 Java 程序能夠以統一的方式與各種數據庫進行交互,而無需關心底層數據庫的具體實現細節

二、添加MySQL的JDBC驅動包

????????將JAR包放在后端WEB-INF/lib目錄下,這個JAR包通常是用于連接MySQL數據庫的驅動包。它的主要作用是讓Java應用程序能夠與MySQL數據庫進行通信和交互,MySQL的JAR驅動包(如mysql-connector-java-x.x.xx.jar)提供了必要的類和方法,使得Java代碼可以通過JDBC(Java Database Connectivity)接口連接到MySQL數據庫。

? ? ? ? 顯示的mysql對應5.版本,顯示MySQL80 對應jar包的8.版本【我這里是顯示的mysql所以使用5.版本的jar包】

可以去網上下載資源:

三、使用JDBC連接數據庫應用🔗

具體使用jdbc的步驟就不詳細寫啦,在代碼的注釋里面寫的很詳細哦~

3.1創建一個包

創建com.lxy.util package,在包下創建Test類,

修改目錄的呈現方式:

?普通的java類不需要部署到tomcat上,加一個main方法作為入口方法:

在這個main中寫sql語句。

3.2?查找實例

package com.lxy.util;import java.sql.DriverManager;
import java.sql.ResultSet;import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Statement;public class Test {public static void main(String[] args) {String sql = "select * from student";search(sql);}//查找public static void search(String sql) {//和navicat的查詢sql操作差不多//報錯原因:驅動包可能找不到,點擊紅線可以try/catch或者拋出,后續代碼在try中寫try {//1、:加載驅動,沒有驅動無法調用數據庫Class.forName("com.mysql.jdbc.Driver");//8. 版本的是com.mysql.cj.jdbc.Driver//2、:填寫用戶信息和urlString url="jdbc:mysql://localhost:3306/thefirst";String username = "root";String password = "2020";//3、:驅動管理類調用方法進行連接,找到連接對象//報錯:需要強制類型轉換   子類 對象名 =(子類)父類Connection con = (Connection) DriverManager.getConnection(url, username, password);//4、:創建執行sql的對象,同樣需要強制類型轉換Statement statement = (Statement) con.createStatement();//5、:執行sql語句//executeQuery用于查找,獲得返回結果ResultSet resultSet = statement.executeQuery(sql);//6、resultSet處理數據 resultSet.next()指向下一行【默認指向不是數據的第一行,所以要next】while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");String sex = resultSet.getString("sex");int age = resultSet.getInt("age");System.out.println("id: " + id + ", name: " + name + ", sex: " + sex + ", age: " + age);}//7、釋放資源:先建立的后釋放if(resultSet!=null) {resultSet.close();}if(statement!=null) {statement.close();}if(con!=null) {con.close();}} catch (Exception e) {  //ClassNotFound刪掉,可以捕獲所有出現的異常// TODO Auto-generated catch blocke.printStackTrace();} }}

運行代碼:

?

?

?3.3?修改添加刪除實例

和查找都是一樣的,只是main方法中的sql語句不同

//添加public static void add(String sql) {try {//1、:加載驅動,沒有驅動無法調用數據庫    Class.forName("com.mysql.jdbc.Driver");//8. 版本的是com.mysql.cj.jdbc.Driver//2、:填寫用戶信息和urlString url="jdbc:mysql://localhost:3306/thefirst";String username = "root";String password = "2020";//3、:驅動管理類調用方法進行連接,找到連接對象//報錯:需要強制類型轉換   子類 對象名 =(子類)父類Connection con = (Connection) DriverManager.getConnection(url, username, password);//4、:創建執行sql的對象,同樣需要強制類型轉換Statement statement = (Statement) con.createStatement();//5、:執行sql語句//executeupdata用于添加,獲得返回結果int num = statement.executeQuery(sql);//7、釋放資源:先建立的后釋放if(statement!=null) {statement.close();}if(con!=null) {con.close();}} catch (Exception e) {  //ClassNotFound刪掉,可以捕獲所有出現的異常// TODO Auto-generated catch blocke.printStackTrace();} }

注意sql語句要求提前在navicat中寫好復制過來,因為會涉及轉義字符

    public static void main(String[] args) {String sql = "update student set name=\"小66\",age=19,sex=\"男\" where id =4\r\n" + "";add(sql);}

刷新表:

?

四、封裝?📦

? ?????????我們可以把常見的操作代碼封裝成類,使用的時候直接調用即可【只需要修改部分內容】

創建個db包,放入對數據庫增刪改查的兩個class文件【以后用的時候直接調】

DBConnection.java

package com.lxy.db;import java.sql.Connection;
import java.sql.DriverManager;public class DBConnection {String driver = "com.mysql.jdbc.Driver";  //5...//String driver = "com.mysql.cj.jdbc.Driver";//8...String url = "jdbc:mysql://127.0.0.1:3306/thefirst?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true";String user = "root";String password = "2020";//密碼 根據實際情況修改public Connection conn;public DBConnection() {try {Class.forName(driver);conn = (Connection) DriverManager.getConnection(url, user, password);//// if(!conn.isClosed())// System.out.println("Succeeded connecting to the Database!");} catch (Exception e) {e.printStackTrace();}}public void close() {try {this.conn.close();} catch (Exception e) {e.printStackTrace();}}}

MysqlUtil.java

package com.lxy.db;import java.rmi.StubNotFoundException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import com.sun.org.apache.bcel.internal.generic.Select;
public class MysqlUtil {//添加public static int add(String sql) {int i=0;DBConnection db = new DBConnection();try {        PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql);i=preStmt.executeUpdate();preStmt.close();db.close();} catch (Exception e) {e.printStackTrace();}return i;}//修改public static int update(String sql) {int i =0;DBConnection db = new DBConnection();try {PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(sql);i = preStmt.executeUpdate();preStmt.close();db.close();} catch (SQLException e) {e.printStackTrace();}return i;}//刪除public static int del(String delstr) {int i=0;DBConnection db = new DBConnection();try {    PreparedStatement preStmt = (PreparedStatement) db.conn.prepareStatement(delstr);i=preStmt.executeUpdate();preStmt.close();db.close();} catch (SQLException e){e.printStackTrace();}return i;}//查數量public static int getCount(String sql) {int sum = 0;DBConnection db = new DBConnection();try {Statement stmt = (Statement) db.conn.createStatement();ResultSet rs = (ResultSet) stmt.executeQuery(sql);while (rs.next()) {sum += rs.getInt(1);}rs.close();db.close();} catch (Exception e) {}return sum;}//查找public static String getJsonBySql( String sql,String[] colums){ArrayList<String[]>  result = new ArrayList<String[]>();DBConnection db = new DBConnection();try {Statement stmt = (Statement) db.conn.createStatement();ResultSet rs = (ResultSet) stmt.executeQuery(sql);while(rs.next()){String[] dataRow = new String[colums.length];for( int i = 0; i < dataRow.length; i++ ) {dataRow[i] = rs.getString( colums[i] );}result.add(dataRow);}rs.close();db.close();} catch (SQLException e) {e.printStackTrace();}return listToJson(result,colums);}public static String listToJson( ArrayList<String[]> list,String[] colums) {String jsonStr = "{\"code\":0,\"msg\":\"ok\",\"data\":[";for(int i = 0; i < list.size(); i++) {String arr = "{";for( int j = 0; j < list.get(0).length; j++) {if( list.get(i)[j] == null || "NULL".equals(list.get(i)[j])) {arr += "\"" + colums[j] + "\":\"\"";}else {arr += "\"" + colums[j] + "\""+":" ;arr +=  "\"" + list.get(i)[j].replace("\"","\\\"") + "\"";}if( j < list.get(0).length - 1 ) {arr += ",";}}arr += "}";if( i < list.size() - 1 ) {arr += ",";}jsonStr += arr;}jsonStr += "]}";return jsonStr;}}

?測試使用一下

測試1

成功輸出:

{"code":0,"msg":"ok","data":[{"id":"1","name":"張三","age":"20","sex":"女"},{"id":"2","name":"李四","age":"20","sex":"男"},{"id":"3","name":"小紅","age":"20","sex":"女"},{"id":"4","name":"小66","age":"19","sex":"男"},{"id":"6","name":"麗麗","age":"20","sex":"女"}]}

測試2?

刷新表格出現?

?



????????至此你已經掌握后端如何使用JDBC與數據庫進行交互了!!!!?從檢查MySQL安裝到封裝數據庫操作,每一步都詳細講解,希望你能在實際項目中靈活運用這些知識。希望這篇博客對你有所幫助!如果有任何問題或建議,歡迎在評論區留言。😊

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

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

相關文章

貪心算法--

1.檸檬水找零 link:860. 檸檬水找零 - 力扣&#xff08;LeetCode&#xff09; code class Solution { public:bool lemonadeChange(vector<int>& bills) {// 貪心算法&#xff0c; 優先花出大面額bill&#xff0c; 盡可能保護小面額billint five 0, ten 0;// 不…

基于YOLO11深度學習的電瓶車進電梯檢測與語音提示系統【python源碼+Pyqt5界面+數據集+訓練代碼】

《------往期經典推薦------》 一、AI應用軟件開發實戰專欄【鏈接】 項目名稱項目名稱1.【人臉識別與管理系統開發】2.【車牌識別與自動收費管理系統開發】3.【手勢識別系統開發】4.【人臉面部活體檢測系統開發】5.【圖片風格快速遷移軟件開發】6.【人臉表表情識別系統】7.【…

github生成badges的方法

在Github頁面上生成類似下面這樣的badge的方法 你可以通過以下步驟在GitHub個人主頁的README中創建類似的技術棧徽章&#xff1a; 一、使用 Shields.io 生成徽章 Shields.io 是一個開源徽章生成工具&#xff0c;支持自定義文本、顏色、圖標等參數。 1. 基礎模板 https://…

vue3 二次封裝uni-ui中的組件,并且組件中有 v-model 的解決方法

在使用uniappvue3開發中&#xff0c; 使用了uni-ui的組件&#xff0c;但是我們也需要自定義組件&#xff0c;比如我要自定一個picker 的組件&#xff0c; 是在 uni-data-picker 組件的基礎上進行封裝的 父組件中的代碼 <classesselect :selectclass"selectclass"…

Spring Boot啟動流程及源碼實現深度解析

Spring Boot啟動流程及源碼實現深度解析 一、啟動流程概述 Spring Boot的啟動流程圍繞SpringApplication類展開&#xff0c;核心流程可分為以下幾個階段&#xff1a; 初始化階段&#xff1a;推斷應用類型&#xff0c;加載ApplicationContextInitializer和ApplicationListene…

爬蟲案例七Python協程爬取視頻

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、Python協程爬取視頻 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 爬蟲案例七協程爬取視頻 提示&#xff1a;以下是本篇文章正文…

uni-app開發的App和H5嵌套封裝的App,以及原生App有什么區別

uni-app 開發的 App 和 H5 嵌套封裝的 App 是兩種不同的開發模式&#xff0c;雖然它們都可以實現跨平臺開發&#xff0c;但在技術實現、性能、功能支持等方面有顯著區別。以下是詳細對比&#xff1a; 1. uni-app 開發的 App uni-app 是一個基于 Vue.js 的跨平臺開發框架&#…

Python 爬蟲實戰案例 - 獲取拉勾網招聘職位信息

引言 拉勾網&#xff0c;作為互聯網招聘領域的佼佼者&#xff0c;匯聚了海量且多樣的職位招聘信息。這些信息涵蓋了從新興科技領域到傳統行業轉型所需的各類崗位&#xff0c;無論是初出茅廬的應屆生&#xff0c;還是經驗豐富的職場老手&#xff0c;都能在其中探尋到機遇。 對…

LM Studio 替換源的方式解決huggingface.co無法訪問的問題

安裝軟件完成之后&#xff0c;不要打開&#xff0c;打開了就直接關閉 在安裝目錄下&#xff0c;比如我安裝在E:\Program Files\LM Studio 下面三個文件中的huggingface.co全部替換為hf-mirror.com然后再打開即可。 E:\Program Files\LM Studio\resources\app\.webpack\rende…

【模擬CMOS集成電路設計】帶隙基準(Bandgap)設計與仿真(基于運放的電流模BGR)

【模擬CMOS集成電路設計】帶隙基準&#xff08;Bandgap&#xff09;設計與仿真 前言工程文件&部分參數計算過程&#xff0c;私聊~ 一、 設計指標指標分析&#xff1a; 二、 電路分析三、 仿真3.1仿真電路圖3.2仿真結果(1)運放增益(2)基準溫度系數仿真(3)瞬態啟動仿真(4)靜態…

微服務拆分-遠程調用

我們在查詢購物車列表的時候&#xff0c;它有一個需求&#xff0c;就是不僅僅要查出購物車當中的這些商品信息&#xff0c;同時還要去查到購物車當中這些商品的最新的價格和狀態信息&#xff0c;跟購物車當中的快照進行一個對比&#xff0c;從而去提醒用戶。 現在我們已經做了服…

機動車授權簽字人考試的報名條件是什么?

機動車授權簽字人考試的報名條件通常如下&#xff1a; 學歷職稱與工作經驗要求 中級職稱及以上&#xff1a;應具備中級及以上專業技術職稱&#xff0c;且從事相關檢驗檢測工作三年及以上。如果承檢車型有專項作業車、大型客車、校車和危險貨物運輸車等&#xff0c;若不是相關專…

智慧工廠監測信息系統:構筑安全的數字化未來

在現代工業的浪潮中&#xff0c;智慧工廠已成為推動生產效率和產品質量提升的關鍵力量。為了確保這一先進生產模式的穩健運行&#xff0c;智慧工廠監測信息系統應運而生&#xff0c;并通過一系列安全措施&#xff0c;為企業的數字化轉型保駕護航。 安全注冊&#xff0c;筑牢第…

P2P中NAT穿越方案(UDP/TCP)(轉)

轉自&#xff1a;P2P中NAT穿越方案&#xff08;UDP/TCP&#xff09;_udp反向鏈接-CSDN博客 同&#xff1a;P2P中NAT穿越方案&#xff08;UDP/TCP&#xff09; - 知乎 (zhihu.com) 本文介紹了傳統基于udp的打洞方式&#xff0c;更進一步闡述了tcp打洞的原理&#xff0c;是對于…

算法 之 樹形dp 樹的中心、重心

文章目錄 重心實踐題目小紅的陡峭值 在樹的算法中&#xff0c;求解樹的中心和重心是一類十分重要的算法 求解樹的重心 樹的重心的定義&#xff1a;重心是樹中的一個節點&#xff0c;如果將這個點刪除后&#xff0c;剩余各個連通塊中點數的最大值最小&#xff0c;那么這個節點…

游戲引擎學習第146天

音高變化使得對齊讀取變得不可能&#xff0c;我們可以支持循環聲音了。 我們今天的目標是完成之前一段時間所做的音頻代碼。這個項目并不依賴任何引擎或庫&#xff0c;而是一個教育項目&#xff0c;目的是展示從頭到尾運行一個游戲所需要的全部代碼。無論你對什么方面感興趣&a…

深入理解MySQL主從原理

導讀 高鵬&#xff08;網名八怪&#xff09;&#xff0c;《深入理解MySQL主從原理》系列文的作者。 本系列通過GTID、Event、主庫、從庫、案例分析&#xff0c;五大塊來詳細講解主從原理。 這篇文章重在學習筆記整理&#xff01; 在學習《深入理解MySQL主從原理》一書時&…

前端數據模擬利器 Mock.js 深度解析

前端數據模擬利器 Mock.js 深度解析 一、Mock.js 核心價值 1.1 為何需要數據模擬 前后端并行開發加速接口文檔驅動開發異常場景模擬測試演示環境數據構造 1.2 Mock.js 核心能力 // 典型數據生成示例 Mock.mock(/api/user, {"users|5-10": [{"id|1": 1…

Phi-4-multimodal:圖、文、音頻統一的多模態大模型架構、訓練方法、數據細節

Phi-4-Multimodal 是一種參數高效的多模態模型&#xff0c;通過 LoRA 適配器和模式特定路由器實現文本、視覺和語音/音頻的無縫集成。訓練過程包括多階段優化&#xff0c;確保在不同模式和任務上的性能&#xff0c;數據來源多樣&#xff0c;覆蓋高質量網絡和合成數據。它的設計…

前后端數據加密傳輸【最佳方案】

AES和RSA區別 算法類型安全性密鑰長度/輸出長度速度應用場景AES對稱加密高128位、192位、256位快適用于大規模數據加密&#xff0c;入HTTPS協議的數據傳輸RSA非對稱加密高1024位、2048位、4096位較慢適用于數據安全傳輸、數字簽名和身份驗證 綜上&#xff1a;兼顧安全性和性能…