JDBC方式重连MySQL数据库-进行操作

采用JBDC的方式,重新连接数据库,对数据库进行增删改查操作

JdbcUtil工具类

package com.paas.process.utils;

import java.sql.*;
import java.util.List;

/**
 *  MySQL
 *  Jdbc工具类
 *  用于切换数据源,对数据库进行操作
 * @author scz
 * @Date 2021-04-06
 */
public class JdbcUtil {

    /**
     * 连接
     */
    public  static Connection connection = null;
    /**
     * 预编译通道
     */
    public  static PreparedStatement preparedStatement = null;
    /**
     * 返回结果
     */
    public  static ResultSet resultSet = null;

    /**
     * 只写了 MySQL的
     */
    static {
        try {
            // 加载MySql的驱动类
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     *  建立 Connection
     * @param url 数据库url
     * @param userName 用户名
     * @param pwd 密码
     * @return Connection
     */
    private static Connection getConnection(String url, String userName, String pwd){
        try {
            // 建立数据库连接
            connection = DriverManager.getConnection(url, userName, pwd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return connection;
    }

    /**
     *  采用预编译通道
     * @param url 数据库url
     * @param userName 用户名
     * @param pwd 密码
     * @param sql sql
     * @return PreparedStatement
     */
    private static PreparedStatement getPreparedStatement(String url, String userName, String pwd,String sql){
        try {
            // 获取连接
            connection = getConnection(url,userName,pwd);
            // 预编译通道
            preparedStatement = connection.prepareStatement(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return preparedStatement;
    }

    /**
     *  不带参数的 查询  适合查询所有数据
     * @param url 数据库url
     * @param userName 用户名
     * @param pwd 密码
     * @param sql sql
     * @return 结果集
     */
    public static ResultSet queryAll(String url,String userName,String pwd,String sql){
        try {
            // 获取 预编译通道
            preparedStatement = getPreparedStatement(url, userName, pwd,sql);
            // 执行sql 得到结果
            resultSet = preparedStatement.executeQuery();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultSet;
    }

    /**
     *  带参数的查询
     * @param url 数据库url
     * @param userName 用户名
     * @param pwd 密码
     * @param sql sql
     * @param params 参数
     * @return 结果集
     */
    public static ResultSet queryByParam(String url,String userName,String pwd,String sql,List<String> params){
        try {
            // 获取预编译通道
            preparedStatement = getPreparedStatement(url, userName, pwd, sql);
            // 遍历参数
            if (params != null && params.size() > 0){
                for (int i = 0; i < params.size(); i++) {
                    // 参数对应占位符  占位符从1开始
                    preparedStatement.setObject((i + 1), params.get(i));
                }
            }
            // 得到结果
            resultSet = preparedStatement.executeQuery();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultSet;
    }
    /**
     *  增删改 的操作 不带参数
     * @param url 数据库url
     * @param userName 用户名
     * @param pwd 密码
     * @param sql sql
     */
    public static void update(String url,String userName,String pwd,String sql){
        try {
            // 获取预编译通道
            preparedStatement = getPreparedStatement(url,userName,pwd,sql);
            // 执行sql 返回结果为 sql结果的总条数 比如:新增一条 返回结果为1 如果不为1 那么新增失败
            // 这里暂时不用结果  一般来说需要
            preparedStatement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    /**
     *  增删改 的操作 带参数
     * @param url 数据库url
     * @param userName 用户名
     * @param pwd 密码
     * @param sql sql
     * @param params 参数
     */
    public static void update(String url,String userName,String pwd,String sql,List<String> params){
        try {
            // 获取预编译通道
            preparedStatement = getPreparedStatement(url,userName,pwd,sql);
            // 遍历参数 使之对应占位符
            if (params != null && params.size() > 0) {
                for (int i = 0; i < params.size(); i++) {
                    preparedStatement.setObject((i + 1), params.get(i));
                }
            }
            // 执行sql
            preparedStatement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    /**
     *  增删改 批量的操作 带参数
     *  批量
     * @param url 数据库url
     * @param userName 用户名
     * @param pwd 密码
     * @param sql sql
     * @param params 参数
     */
    public static void updateBatch(String url,String userName,String pwd,String sql,List<Object[]> params){
        try {
            // 获取预编译通道
            preparedStatement = getPreparedStatement(url,userName,pwd,sql);
            // 遍历参数 最外层
            if (params != null && params.size() > 0) {
                for (Object[] values : params) {
                    // 获取内层参数
                    // 遍历内层参数  并对应占位符
                    if (values != null && values.length > 0) {
                        for (int i = 0; i < values.length; i++) {
                            preparedStatement.setObject((i + 1), values[i]);
                        }
                    }
                    // 加入批量操作
                    preparedStatement.addBatch();
                }
            }
            // 遍历结束 执行sql 进行批量操作
            preparedStatement.executeBatch();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 关闭所有通道
     * 执行完操作  别忘记关闭通道 一般在finally中执行
     */
    public static void closeAll(){
        try {
            // 关闭结果集
            if (resultSet != null) {
                resultSet.close();
            }
            // 关闭预编译通道
            if (preparedStatement != null) {
                preparedStatement.close();
            }
            // 关闭连接
            if (connection != null) {
                connection.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

测试实例

public void test(){
        // 数据库信息
        String url = "jdbc:mysql://127.0.0.1:3306/source_db?useUnicode=true&characterEncoding=utf8&useSSL=false";
        String userName = "root";
        String pwd = "12345";

        String sql = "select * from user";
        // 一 : 无参数的 查询
        ResultSet resultSet = JdbcUtil.queryAll(url, userName, pwd, sql);
        try {
            // 遍历结果
            while (resultSet.next()) {
                String name = resultSet.getString("name");
                Integer age = resultSet.getInt("age");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            // 关闭  别忘了
            JdbcUtil.closeAll();
        }
        // 二 : 有参数的方法
        String sqlByParam = "select * from user where id=?";
        List<String> params = new ArrayList<>();
        params.add("1");
        // 得到结果
        ResultSet resultSet1 = JdbcUtil.queryByParam(url, userName, pwd, sqlByParam, params);
        // 结果操作

        // 三 : 增删改
        // 以上是查询 一般要返回结果
        // 增删改的话 我这没有返回结果 需要的自己加
        // 有单条的  有批量的
        String insertSql = "insert into user values (?,?)";
        // 参数
        List<String> paramsList = new ArrayList<>();
        paramsList.add("张三");
        paramsList.add("20");
        // 新增
        JdbcUtil.update(url, userName, pwd, sqlByParam, paramsList);

        // 批量操作
        List<Object[]> paramBatch = new ArrayList<>();
        paramBatch.add(new Object[]{"李四","21"});
        paramBatch.add(new Object[]{"王五","22"});
        paramBatch.add(new Object[]{"老六","23"});
        // 批量新增
        JdbcUtil.updateBatch(url, userName, pwd, sqlByParam, paramBatch);

        /**
         * 其余操作  可以自行测试
         * 若有BUG 自己可以更改
         */
    }