【数据库】java使用新版的jdbc2连接mysql数据库代码类

版权声明:本文为博主原创文章,如需转载请注明出处,谢谢。喜欢请关注哟~ https://blog.csdn.net/sjt223857130/article/details/83180656

在java中连接mysql数据库,是一个老生常谈的问题。

到今天为止,网上能搜到相当多的教程和示例了,原理都差不多。

用到的jar包如下,可以到官网下载找到。

  • commons-dbcp2-2.5.0.jar
  • commons-pool2-2.6.0.jar
  • commons-logging-1.2.jar
  • mysql-connector-java-8.0.12.jar

这里主要写一下新版的jdbc2连接需要注意的地方,整理成类,供大家参考使用。

DBUtil.java 类:负责管理Connection连接
package core.mysql;

import org.apache.commons.dbcp2.BasicDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBUtil {
    // 声明一个basicDataSource
    private static BasicDataSource dataSource = new BasicDataSource();


    // 设置数据源
    static {
        // 连接参数
        String parameters = "&useUnicode=true";//使用Unicode
        parameters += "&characterEncoding=utf-8";//编码UTF8
        parameters += "&serverTimezone=GMT%2B8";//时区GMT+8
        parameters += "&useSSL=false";//禁用SSL
        // 数据库名称
        String dbName = "sggames";

        // 数据库驱动,以使用mysql-connector-java包版本为准
        // 按照官方提示支持将Mysql5(com.mysql.jdbc.Driver)改为Mysql6(com.mysql.cj.jdbc.Driver)
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        // 连接数据库的url,使用(serverTimezone=GMT+8)如果设定serverTimezone=UTC,会比中国时间早8个小时
        dataSource.setUrl("jdbc:mysql://localhost:3306/" + dbName + "?" + parameters);
        // 连接数据库的用户名
        dataSource.setUsername("root");
        // 连接数据库的密码
        dataSource.setPassword("root");

        // 初始化链接数量(默认值:0)
        dataSource.setInitialSize(10);
        // 最大活动连接数,设置负值不限制
        dataSource.setMaxTotal(8);
        // 最大空闲连接数,设置负值不限制
        dataSource.setMaxIdle(5);
        // 设置最小空闲连接数量
        dataSource.setMinIdle(1);

        //只会发现当前连接失效,再创建一个连接供当前查询使用
        dataSource.setTestOnBorrow(true);
        //超过时间限制,回收没有用(废弃)的连接(默认为 300秒,调整为180)
        dataSource.setRemoveAbandonedTimeout(180);
    }

    /**
     * 获取数据库连接
     */
    public static Connection getConnection() {
        Connection conn = null;
        try {
            // 从本地线程管理对象中获取
            if (dataSource != null) {
                conn = dataSource.getConnection();
            }
            conn.setAutoCommit(false);
        } catch (SQLException e) {
            System.out.println("获取数据库边接失败:" + e);
            throw new RuntimeException(e);
        }
        return conn;
    }

    /**
     * 仅关闭数据库连接
     */
    public static void closeConnection() {
        Connection conn = null;
        try {
            if (conn != null) {
                conn.close();
                System.out.println("关闭数据库边接成功");
            }
        } catch (Exception e) {
            System.out.println("关闭数据库连接失败:" + e);
            throw new RuntimeException(e);
        }
    }


    /**
     * 释放资源并关闭连接
     */
    public static void free(ResultSet rs, Statement st, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                System.out.println("关闭RS失败:" + e);
                e.printStackTrace();
            }
        }
        if (st != null) {
            try {
                st.close();
            } catch (SQLException e) {
                System.out.println("关闭ST失败:" + e);
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                System.out.println("关闭CONN失败:" + e);
                e.printStackTrace();
            }
        }
    }

    /**
     * 数据池信息输出
     */
    public static void debugConnection() {
        System.out.println(" 最小空闲连接MinIdle=" + dataSource.getMinIdle());
        System.out.println(" 最大空闲连接MaxIdle=" + dataSource.getMaxIdle());
        System.out.println(" 最大连接数量MaxTotal=" + dataSource.getMaxTotal());
        System.out.println(" 初始大小InitialSize=" + dataSource.getInitialSize());
        System.out.println(" 超时等待时间MaxWaitMillis=" + (dataSource.getMaxWaitMillis() / 1000));
        System.out.println(" 获取活动的连接数getNumActive()=" + dataSource.getNumActive());
        System.out.println(" 获取连接数getNumIdle=" + dataSource.getNumIdle());
    }


}
DBManager.java 类:负责操作数据库,增,查,删,改。
package core.mysql;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DBManager {
    /**
     * 从连接池中获取连接
     */
    private static Connection getConnection() throws Exception {
        return DBUtil.getConnection();
    }

    /**
     * 用于查询,返回结果集
     *
     * @param sql
     * @return 结果集
     * @throws java.sql.SQLException
     */
    @SuppressWarnings("rawtypes")
    public static List query(String sql) throws Exception {
        ResultSet rs = null;
        PreparedStatement ts = null;
        Connection conn = getConnection();
        try {
            ts = conn.prepareStatement(sql);
            rs = ts.executeQuery();
            return ResultToListMap(rs);
        } catch (SQLException e) {
            throw new SQLException(e);
        } finally {
            DBUtil.free(rs, ts, conn);
        }
    }

    /**
     * 结果集映射为hash
     */
    @SuppressWarnings({"unchecked", "rawtypes"})
    private static List ResultToListMap(ResultSet rs) throws SQLException {
        List list = new ArrayList();
        while (rs.next()) {
            ResultSetMetaData md = rs.getMetaData();
            Map map = new HashMap();
            int mdCount = md.getColumnCount();
            for (int i = 1; i <= mdCount; i++) {
                map.put(md.getColumnLabel(i), rs.getObject(i));
            }
            list.add(map);
        }
        return list;
    }
}

使用方法:

        String sql = "select * from 表";

        try {
            List<Map> rs = DBManager.query(sql);
            System.out.println(rs.get(0).get("字段"));
            System.out.println("查询成功");
        } catch (Exception e) {
            System.out.println("查询失败");
            e.printStackTrace();
        }

就这么简单!

猜你喜欢

转载自blog.csdn.net/sjt223857130/article/details/83180656