2.获取数据库连接

JDBC-获取数据库连接

1. 方式一

这种方式在代码中指明了要获取的是Mysql数据库的驱动对象,如果后续切换其他数据库,就需要修改代码。因此在JDBC程序中,尽量不要出现第三方的API。

java 复制代码
	@Test
    public void test1() throws SQLException {
        Driver driver = new com.mysql.cj.jdbc.Driver();
        Properties properties = new Properties();
        properties.setProperty("user", "root");
        properties.setProperty("password", "root");
        Connection connect = driver.connect("jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC", properties);
        System.out.println(connect);
    }

输出结果:

java 复制代码
com.mysql.cj.jdbc.ConnectionImpl@7642df8f

2. 方式二

使用反射的方式创建驱动对象,这里还是获取Mysql的驱动对象,将来如果要切换数据库,驱动可以做成配置项。

java 复制代码
	@Test
    public void test2() throws Exception {
        Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver = (Driver) aClass.newInstance();
        Properties properties = new Properties();
        properties.setProperty("user", "root");
        properties.setProperty("password", "root");
        Connection connect = driver.connect("jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC", properties);
        System.out.println(connect);
    }

3. 方式三

使用DriverManager获取连接,而非之前的Driver。

java 复制代码
	@Test
    public void test3() throws Exception {
        Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver = (Driver) aClass.newInstance();
        DriverManager.registerDriver(driver);
        Properties properties = new Properties();
        properties.setProperty("user", "root");
        properties.setProperty("password", "root");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC", properties);
        System.out.println(connection);
    }

4. 方式四

相较于方式三,去掉了"加载并注册驱动"的步骤。

java 复制代码
	@Test
    public void test4() throws SQLException {
        Properties properties = new Properties();
        properties.setProperty("user", "root");
        properties.setProperty("password", "root");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC", properties);
        System.out.println(connection);
    }

因为,mysql的驱动包,可以自动加载驱动类:

并且在驱动类中已经完成了注册:

5. 方式五(推荐)

将数据库连接信息放到配置文件中

java 复制代码
@Test
    public void test5() throws IOException, ClassNotFoundException, SQLException {
        InputStream inputStream = TestGetConnection.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        properties.load(inputStream);

        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");
        String driver = properties.getProperty("driver");

        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url, user, password);

        System.out.println(connection);
    }

jdbc.properties

java 复制代码
user=root
password=root
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC

6. 获取连接和关闭资源的操作,写在公共的类中

java 复制代码
public class JDBCUtils {
    public static Connection getConnection() throws Exception {
        InputStream inputStream = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        properties.load(inputStream);

        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");
        String driver = properties.getProperty("driver");

        Class.forName(driver);

        return DriverManager.getConnection(url, user, password);
    }
    public static void close(Connection connection, Statement statement) {
        try {
            if (statement != null) {
                statement.close();
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    public static void close(Connection connection, Statement statement, ResultSet resultSet) {
        close(connection,statement);
        if(resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
相关推荐
睡不醒男孩0308232 小时前
第二篇:深入探索开源数据库高可用:构建基于CLup的PostgreSQL生产级高可用与读写分离架构
数据库·postgresql·开源·clup
Micro麦可乐5 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
码农阿豪5 小时前
从零到一:Spring Boot快速接入金仓数据库实战
数据库·spring boot·后端
鼎讯信通5 小时前
风电光缆运维提质增效:G-4000A 光缆故障追踪仪破解风场巡检难题
运维·网络·数据库
三十..6 小时前
MySQL 从入门到高可用架构实战精要
运维·数据库·mysql
cfm_29146 小时前
Redis五大基本数据结构底层了解
数据结构·数据库·redis
真实的菜7 小时前
Redis 从入门到精通(十二):典型业务场景实战 —— 排行榜、限流器、秒杀系统、Session 共享
数据库·redis·python
你想考研啊7 小时前
mysql数据库导出导入
数据库·mysql·oracle
十年编程老舅8 小时前
Linux DRM:底层逻辑与实践架构
数据库·mysql
The Sheep 20238 小时前
Vue复习
linux·服务器·数据库