当前位置: 首页 > article >正文

JDBC——获取DBMS连接、优化与工具类封装

目录

一、JDBC介绍

二、获取DBMS连接

(一)获取连接

1.导入jar包或依赖到项目中

2.编写代码,获取连接

(二)获取连接优化

(三)通过配置文件封装工具类

1.在src下创建jdbc.properties文件

2.编写jdbc.properties文件

3.编写JDBCUtils工具类

4.编写测试类


一、JDBC介绍

        编写Java的程序,实现对任意一个DBMS软件的数据进行增删改查,需要使用JDBC(java database connectivity)。JDBC是SUN公司发布的一套关于数据库的规范,实际上是一套接口,各个数据库厂商都需要实现这个接口,实现接口中的抽象方法。
        好处:开发者只需要学会JDBC接口,就可以调用各个数据库厂商的内容,轻松实现增删改查。
        各个数据库厂商提供JDBC这套接口的实现,这些实现称之为驱动。

去https://mvnrepository.com/artifact/com.mysql/mysql-connector-j/8.0.33 下载对应的jar包

二、获取DBMS连接

获取数据库连接需要4个内容:

  1. 数据库的用户名
  2. 数据库的密码
  3. 数据库的ip地址和端口号和数据库名称
  4. 数据库驱动(这里使用mysql8的驱动)

(一)获取连接

1.导入jar包或依赖到项目中

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

2.编写代码,获取连接

package com.test.demo;

import com.mysql.cj.jdbc.Driver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TestDemo {
    public static void main(String[] args) {
        // 用户名 密码  url
        String username = "root";
        String password = "root";
        // jdbc:mysql://ip:端口号/数据库名称
        // 如果ip是localhost 端口号是3306  可以省略ip和端口号
//        String url = "jdbc:mysql://localhost:3306/mydb";
        String url = "jdbc:mysql:///mydb";
        Connection connection = null;
        try {
            // 注册驱动(让jvm知道使用的是哪一个DBMS软件)
            // 在java项目中可以省略,不需要注册,mysql驱动包中存在一个服务发现机制
            // 会去META-INF/services/java.sql.Driver中自动注册驱动
            // 这个服务发现机制只限于java项目,在maven/web项目中无效
            DriverManager.registerDriver(new Driver());

            // 获取数据库的连接
            connection = DriverManager.getConnection(url, username, password);
            System.out.println(connection);
            // com.mysql.cj.jdbc.ConnectionImpl@4be29ed9

        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            if (connection != null) {
                try {
                    // 关闭连接
                    connection.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}

(二)获取连接优化

点击Driver类源码,发现有一个静态代码块中已经注册了驱动

所以不需要再次注册,只需要保证Driver类加载到方法区,就会自动执行静态代码块,就注册成功了。

(三)通过配置文件封装工具类

1.在src下创建jdbc.properties文件

2.编写jdbc.properties文件

jdbc.username=root
jdbc.password=root
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.driver=com.mysql.cj.jdbc.Driver

3.编写JDBCUtils工具类

package com.utils;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class JDBCUtil {
    private static Properties properties = new Properties();

    static {
        // 静态代码块   读取properties文件中的内容
        // 保证在类加载时执行一次  类只加载一次
        try {
            // 读取src下的文件
            properties.load(new FileInputStream("jdbcdemo\\src\\jdbc.properties"));
            // 注册驱动
            Class.forName(properties.getProperty("jdbc.driver"));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取连接
     */
    public static Connection getConnection() {
        // 让Driver类加载到方法区
        Connection connection = null;
        try {
            // 获取数据库的连接
            connection = DriverManager.getConnection(
                    properties.getProperty("jdbc.url"),
                    properties.getProperty("jdbc.username"),
                    properties.getProperty("jdbc.password"));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return connection;
    }

    /**
     * 释放连接资源
     */
    public static void close(Connection connection) {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public static void close(Connection connection, PreparedStatement preparedStatement) {
        if (preparedStatement != null) {
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        close(connection);
    }
}

4.编写测试类

public class TestDemo2 {
    public static void main(String[] args) {
        Connection connection = JDBCUtil.getConnection();
        System.out.println(connection);
        // com.mysql.cj.jdbc.ConnectionImpl@350aac89
        JDBCUtil.close(connection);
    }
}

http://www.kler.cn/a/373998.html

相关文章:

  • 【深度学习】实验 — 动手实现 GPT【三】:LLM架构、LayerNorm、GELU激活函数
  • 大模型学习笔记------什么是大模型
  • 执行Django项目的数据库迁移命令时报错:(1050, “Table ‘django_session‘ already exists“);如何破?
  • ASPICE 4.0引领自动驾驶未来:机器学习模型的特点与实践
  • 「Mac畅玩鸿蒙与硬件4」鸿蒙开发环境配置篇4 - DevEco Studio 高效使用技巧
  • Redis 事务 问题
  • 深入 Prometheus 监控生态 - 第六篇:与 Grafana 实现系统全面监控(健康状态和任务状态看板)
  • 邮件发送excel带预览excel功能
  • Rust线程构建安全并发应用
  • rocksDB手动安装
  • Vue 组件开发:深入理解与实践
  • Knowledge-refined Denoising Network for Robust Recommendation
  • BFS解决拓扑排序(3)_火星词典
  • 机器学习-期末考核-深度学习
  • 【jvm】如何设置新生代和老年代的比例
  • 【笔记】数据结构与算法
  • Golang | Leetcode Golang题解之第514题自由之路
  • pip使用
  • 2024年华为OD机试真题---字符串重新排序
  • PETG耗材3d打印技巧
  • 15分钟学 Go 第 21 天:标准库使用
  • Elasticsearch开源仓库404 7万多star一夜清零
  • 数据结构-选择排序笔记
  • PyTorch提供的多GPU数据并行nn.DataParallel
  • Docker Compose --- 管理多容器应用
  • centos7配置keepalive+lvs