一、了解JDBC
二、添加MySQL的JDBC驅動包
三、使用JDBC連接數據庫應用🔗
3.1創建一個包
3.2?查找實例
?3.3?修改添加刪除實例
四、封裝?📦
DBConnection.java
MysqlUtil.java
?測試使用一下
測試1
測試2?
????????在后端開發中,與數據庫進行交互是非常常見的需求。MySQL 作為一種廣泛使用的開源關系型數據庫,提供了強大的數據存儲和管理能力。熟悉Navicat Premium -CSDN博客? 在上一篇博客中已經了解了這個管理數據庫的工具,那么如何在后端與Mysql進行交互呢????
一、了解JDBC
- 在實際開發中,企業可能會使用多種不同的數據庫(如 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安裝到封裝數據庫操作,每一步都詳細講解,希望你能在實際項目中靈活運用這些知識。希望這篇博客對你有所幫助!如果有任何問題或建議,歡迎在評論區留言。😊