版本一:最基本的Jdbc工具类

public class JdbcUtil {

    private static String url = "jdbc:mysql://localhost:3306/db_data_show_5?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&failOverReadOnly=false";
    private static String password = "root";
    private static String user = "root";

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 释放资源
     *
     * @param rs
     * @param stmt
     * @param conn
     */
    public static void release(ResultSet rs, Statement stmt, Connection conn) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 获取连接
     *
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
        final Connection conn = DriverManager.getConnection(url, user, password);
        return conn;
    }

}

版本二:抽取连接信息后的工具类

  • 第一步:在resources目录下创建mysql.properties文件
url=jdbc:mysql://localhost:3306/db_data_show_5?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&failOverReadOnly=false
password=root
user=root
  • 第二步:使用配置文件的工具类
public class JdbcUtil {

    private static String url ;
    private static String password;
    private static String user;

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

            final Properties properties = new Properties();
            //getResourceAsStream:读取文件,在JavaSE和javaWeb中都可以用,注意路径问题
            final InputStream is = JdbcUtil.class.getResourceAsStream("/mysql.properties");
            properties.load(is);
            url = properties.getProperty("url");
            user = properties.getProperty("user");
            password = properties.getProperty("password");
            is.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接
     *
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
        final Connection conn = DriverManager.getConnection(url, user, password);
        return conn;
    }

    /**
     * 释放资源
     *
     * @param rs
     * @param stmt
     * @param conn
     */
    public static void release(ResultSet rs, Statement stmt, Connection conn) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) throws SQLException {
        final Connection conn = getConnection();
        System.out.println(conn);
    }

}

版本三:添加Druid数据库连接支持

  • 添加Druid依赖
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.17</version>
</dependency>
  • 修改mysql.properties
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_data_show_5?useSSL=false&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF8&autoReconnect=true&failOverReadOnly=false
username=root
password=root

# 初始化时创建的连接的个数
initialSize=10
# 处于活跃状态的连接的个数
maxActive=20
# 连接最多等待时长
maxWait=6000
  • 修改JdbcUtil:
public class JdbcUtil {

    private static DataSource dataSource;

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

            final Properties properties = new Properties();
            //getResourceAsStream:读取文件,在JavaSE和javaWeb中都可以用,注意路径问题
            final InputStream is = JdbcUtil.class.getResourceAsStream("/mysql.properties");
            properties.load(is);
            dataSource = DruidDataSourceFactory.createDataSource(properties);
           is.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取连接
     *
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() throws SQLException {
        final Connection conn =dataSource.getConnection();
        return conn;
    }

    /**
     * 释放资源
     *
     * @param rs
     * @param stmt
     * @param conn
     */
    public static void release(ResultSet rs, Statement stmt, Connection conn) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) throws SQLException {
        final Connection conn = getConnection();
        System.out.println(conn);
    }

}

版本四:添加LocalThread以支持并发

public class JdbcUtil {

    private static DataSource dataSource;
    private static ThreadLocal<Connection> threadLocal = new ThreadLocal<>();

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

            final Properties properties = new Properties();

            //getResourceAsStream:读取文件,在JavaSE和javaWeb中都可以用,注意路径问题
            final InputStream is = JdbcUtil.class.getResourceAsStream("/mysql.properties");
            properties.load(is);
            dataSource = DruidDataSourceFactory.createDataSource(properties);
            is.close();
        } catch (Exception e) {
            throw new RuntimeException("读取配置文件错误");
        }

    }

    /**
     * 获取连接
     *
     * @return
     * @throws SQLException
     */
    public static Connection getConnection() {
        Connection conn = threadLocal.get();
        try {
            if (conn == null || conn.isClosed()) {
                conn = dataSource.getConnection();
                threadLocal.set(conn);
            }
        } catch (SQLException e) {
            throw new RuntimeException("获取连接失败!");
        }
        return conn;
    }

    /**
     * 释放资源
     *
     * @param rs
     * @param stmt
     * @param conn
     */
    public static void release(ResultSet rs, Statement stmt, Connection conn) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) throws SQLException {
        final Connection conn = getConnection();
        System.out.println(conn);
    }

}