基于 JDBC 的后端与 MySQL 数据库交互 javaweb

发布于:2025-03-11 ⋅ 阅读:(113) ⋅ 点赞:(0)

一、了解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、:填写用户信息和url
            String 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 block
            e.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、:填写用户信息和url
                String 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 block
                e.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安装到封装数据库操作,每一步都详细讲解,希望你能在实际项目中灵活运用这些知识。希望这篇博客对你有所帮助!如果有任何问题或建议,欢迎在评论区留言。😊