JDBC 数据库连接全解析:从驱动配置到工具类封装

简介: 本文详解Java连接MySQL的完整流程:从下载适配版本的JDBC驱动jar包、配置项目依赖,到编写URL、用户名、密码获取Connection;重点讲解如何用Properties文件替代硬编码,提升可维护性;最后封装JDBC工具类,集成连接、关闭、事务管理等常用方法,助力高效开发。

前言

本文来讲解,如何获取Java与MySQL的连接以及如何优化数据库的连接并且JDBC的工具类

文章详解,通俗易懂,旨在帮助读者更好的理解和掌握JDBC数据库连接

个人主页:主页

一. 将MySQL对应版本的jar包放入Java项目中

1. 准备工作

jar:数据库驱动
如果要和数据库通信,就要借助数据库驱动。数据库驱动本质上是一组 Java 类
先在官网下载对应的MySQL的jar包
这里用MySQL5.7版本来演示

可以先通过cmd里,输入mysql --help 来找到自己的MySQL版本

看这个表格,找到自己jdk版本对应的jar,再到官网里下载
jar包官网传送门:官网

MySQL 版本

推荐的 MySQL Connector/J 版本

5.1

5.1.x

5.5

5.1.x、5.2.x

5.6

5.1.x、5.2.x、5.6.x

5.7

5.1.x、5.2.x、5.6.x、5.7.x

8.0

5.1.x、5.2.x、5.6.x、5.7.x、8.0.x

5.7版本的,我是下载的5.1.48版本jar包

2. 复制到Java项目

复制对应的jar包

新建一个java项目
新建一个lib目录

单击lib,复制到lib目录


确定后,这个jar包只是放在目录里
现在就要开始将这个变成一个库
右击jar包 ---> 添加到库
这样就可以获取里面的类了

二. 获取数据库连接

1. 连接Mysql数据库的URL

URL格式:jdbc:mysql://[主机名]:[端口号]/[数据库名]?[参数名]=[参数值]
注:每个数据库的写法不一样,这里以MySQL为例

// 连接Mysql数据库的URL
// localhost 代表本机
// 如果没有修改端口号的话,MySQL默认是3360
// YiBeiGen 是数据库名字
String url = "jdbc:mysql//localhosost:3360/YiBeiGen"

2. 连接数据库的用户名

String name = "root";

3. 连接数据库的密码

连接数据库的密码
String passward = "8383";

4. 通过反射实例化

Class.forName("com.mysql.jdbc.Driver");

这里是要理解的,为什么要反射实例化?
就是因为通过这个反射来加载这个Driver类,目的是为了出发static块
先来看看Driver类

5. 通过DriverManager对象获取数据库的连接对象

// 三个参数分别是
// 1. 连接Mysql数据库的URL
// 2. 连接数据库的用户名
// 3. 连接数据库的密码
// 我们在上面都实现过
Connection connection = DriverManager.getConnection(url, name, pwd);

完整代码

public class JdbcTest {
  public static void main(String[] args) throws ClassNotFoundException, SQLException {
    // 连接Mysql数据库的URL
    String url = "jdbc:mysql://localhost:3306/YiBeiGen";
    // 连接数据库的用户名
    String name = "root";
    // 连接数据库的密码
    String pwd = "8383";
    // 通过反射实现数据库驱动的加载与注册
    // 通过反射实例化
    // 添加数据库驱动的目的是翻译要执行的sql语句 
    // 只是加载这个类,目的是为了触发static块
    // 那么Driver类已经实例化出来了,并且放到了DriverManager当中
    Class.forName("com.mysql.jdbc.Driver");
    // 通过DriverManager对象获取数据库的连接对象
    Connection connection = DriverManager.getConnection(url, name, pwd);
    System.out.println(connection);
   }
}


输出结果类似这样没有报错就可以
如果报错了,就先检查密码以及数据库名称是否和MySQL的一致
如果一致都还报错,那么就可以在“连接数据库的URL”中再添加一个 “?useSSL=false"

url = "jdbc:mysql://localhost:3306/YiBeiGen?useSSL=false";

三. Properties文件用法

先讲作用:因为用刚刚这种原始的代码写,会出现一个问题,就是硬编码
硬编码:对于可变的内容,写死在代码中,就像刚刚的那个连接数据库的代码,就是一个死的,它的数据库库名字,连接数据库的URL以及密码都是写死的,这就是硬编码
硬编码的缺点就是,后序如果是另一个人用的这个代码,就要修改源代码,这就很麻烦
那么为了解决这个硬编码问题,就可以通过Properties文件来解决

property的英文意思:属性

1. properties文件介绍

后缀properties的文件是一种属性文件。这种文件以key=value格式存储内容
Java中可以使用Properties工具类来读取这个文件
项目中会将一些配置信息放到properties文件中,所以properties文件经常作为配置文件来使用

2. Properties工具类

Properties工具类,位于java.util包中,该工具类继承自Hashtable<Object,Object>
通过Properties工具类可以读取.properties类型的配置文件

Properties工具类中常用方法

a. load( InputStream is )

load英文意思:加载
通过给定的输入流对象读取properties文件并解析

b. getProperty( String key )

根据key获取对应的value

3. 新建Properties文件

右击包 ---> 新建 ---> 文件

在新建文件对话中,新建文件名字
注意:名字可以随意(最好见名知意),扩展名一定要是properties,扩展名都是小写!

4. 解决文件中文问题

我们创建好这个文件后,就可以在里面些内容了
但是因为文件默认编码的原因,里面写不了中文
如果要能写中文就要先做以下操作

a. 打开Idea的设置

a. 编辑器 ---> 文件编码 ---> 将编码改成GBK编码

修改成GBK中文编码就可以了

5. properties文件写法

这里我创建一个名为:test.properties 的文件
#号是注释

# 欢迎来到艺杯羹的阵地
key1 = 艺杯羹
key2 = LY

四. 使用properties文件优化连接

1. 基本操作

  • PropertiesTest:属性测试
  • class:类
  • getClassLoader:获取类加载器
  • getResourceAsStream:获取资源作为流

a. 实例化Properties对象

Properties prop = new Proerties();

b. 获取读取properties文件的输入流对象

  • PropertiesTest:属性测试
  • class:类
  • getClassLoader:获取类加载器
  • getResourceAsStream:获取资源作为流
InputStream is = PropertiesTest.class.getClassLoader().getResourceAsStream("test.properties");

c. 通过给定的输入流对象读取properties文件并解析

prop.load(is);

d. 获取properties文件中的内容

String value1 = prop.getProperty("key1");
String value2 = prop.getProperty("key2");
System.out.println(value1+" "+value2);


就能够得到key对应的value值

2. 优化获取数据库连接

将连接数据库时所需要的信息存放到properties文件中,可以解决硬编码的问题
所以可以将这些可变的内容,抽取出来放在一个文件中
之后获取数据时,就从文件里获取不就好了
本次就是使用properties文件来优化硬编码问题

可以将以下四处写入properties文件中

a. properties文件内容

#连接Mysql数据库的URL
#jdbc:mysql://连接主机:端口号/数据库名
url=jdbc:mysql://localhost:3306/student
#连接数据库的用户名
username=root
#连接数据库的密码
pwd=3057454077
#数据库驱动名称
driver=com.mysql.jdbc.Driver

b. 获取连接

public class Student {
  public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
    // 实例化Properties对象
    Properties prop = new Properties();
    // 获取读取properties文件的字节输入流对象
    InputStream is = JdbcTest2.class.getClassLoader().getResourceAsStream("jdbc.properties");
    // 读取properties文件并解析
    prop.load(is);
    // 获取连接数据库的url
    String url = prop.getProperty("url");
    // 获取连接数据库的用户名
    String name = prop.getProperty("username");
    // 获取连接数据库的密码
    String pwd = prop.getProperty("pwd");
    // 获取数据库驱动全名
    String drivername = prop.getProperty("driver");
    // 加载并注册驱动,获得DriverManager
    Class.forName(drivername);
    // 通过驱动管理器对象获取连接对象
    Connection connection = DriverManager.getConnection(url, name, pwd);
    System.out.println(connection);
   }
}

五. 封装JDBC工具类

经过刚刚的学习,JDBC一次性的创建连接还是有点麻烦的,那么可以将这个连接的方法封装成一个JDBC工具类,这样之后用就能得心应手了,不会一遍又一遍的去做重复的连接

封装的工具类有两个要求要注意的

工具方法一般定义成静态的
因为直接可以通过类名点方法,这样就更快速,更好
工具类的方法不要抛出异常,直接try - catch

因为增强健壮来统一处理

JdbcUtil工具类

public class JdbcUtils {
  private static String url;
  private static String name;
  private static String pwd;
  static {
    try{
      // 实例化Properties对象
      Properties prop = new Properties();
      // 获取读取properties文件的字节输入流对象
      InputStream is = JdbcTest2.class.getClassLoader().getResourceAsStream("jdbc.properties");
      // 读取properties文件并解析
      prop.load(is);
      // 获取连接数据库的url
      url = prop.getProperty("url");
      // 获取连接数据库的用户名
      name = prop.getProperty("username");
      // 获取连接数据库的密码
      pwd = prop.getProperty("pwd");
      // 获取数据库驱动全名
      String drivername = prop.getProperty("driver");
      // 加载并注册驱动
      Class.forName(drivername);
     }catch(Exception e){
      e.printStackTrace();
     }
   }
  // 获取数据库连接对象
  public static Connection getConnection(){
    Connection connection = null;
    try {
      connection = DriverManager.getConnection(url,name,pwd);
     } catch (SQLException throwables) {
      throwables.printStackTrace();
     }
    return connection;
   }
  // 关闭连接对象
  public static void closeConnection(Connection connection){
    try {
      connection.close();
     } catch (SQLException throwables) {
      throwables.printStackTrace();
     }
   }
  // 提交事务
  public static void commit(Connection connection){
    try {
      connection.commit();
     } catch (SQLException throwables) {
      throwables.printStackTrace();
     }
   }
  // 事务回滚
  public static void rollback(Connection connection){
    try {
      connection.rollback();
     } catch (SQLException throwables) {
      throwables.printStackTrace();
     }
   }
  // 关闭Statement对象
  public static void closeStatement(Statement statement){
    try {
      statement.close();
     } catch (SQLException throwables) {
      throwables.printStackTrace();
     }
   }
  // 关闭ResultSet
  public static void closeResultSet(ResultSet resultSet) {
    try {
      resultSet.close();
     } catch (SQLException throwables) {
      throwables.printStackTrace();
     }
   }
  // DML操作时关闭资源
  public static void closeResource(Statement statement,Connection connection){
    // 先关闭Statement对象
    // 刚刚写的方法
    closeStatement(statement);
    //在关闭Connection对象
    closeConnection(connection);
   }
  // 查询时关闭资源
  public static void closeResource(ResultSet resultSet,Statement statement,Connection connection){
    // 先关闭ResultSet
    closeResultSet(resultSet);
    // 再闭Statement对象
    closeStatement(statement);
    // 最后关闭Connection对象
    closeConnection(connection);
   }
}

为什么要将Properties的操作放在静态块中?
因为Properties文件是一开始就要使用的,那么只有静态块最符合他,当使用了这个类时,最先是执行Properties文件,先获取Properties文件中的值,这样就可以更好的创建连接

这里除了连接数据库的方法,还写出了提交事务、事务回滚、关闭等操作,这些在之后都是会用到的,所以先按这个方法封装一个JDBC工具类

到现在已经讲解完了JDBC获取数据库连接的方法和properties的使用以及JDBC封装的工具类
希望本文能够帮助到你😊

目录
相关文章
|
2月前
|
SQL 存储 Java
JDBC对数据的增删改查操作:从Statement到PrepareStatement
本文详解JDBC中Statement与PreparedStatement的用法:Statement执行静态SQL,但存在SQL注入风险;PreparedStatement支持预编译、参数绑定,更安全高效。涵盖增删改查实战及资源管理,助你掌握数据库操作核心技能。
70 0
|
Java 关系型数据库 MySQL
java连接mariaDB的设置
java连接mariaDB的设置
1253 0
|
数据可视化 Java 分布式数据库
分享111个Java源码,总有一款适合您
分享111个Java源码,总有一款适合您
1127 0
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
224286 69
|
6月前
|
Oracle Java 关系型数据库
JDK 19安装教程 Windows版:详细步骤+环境变量配置+命令验证(含java/javac/java -version)
本文提供Oracle官方规范下的Windows版JDK 19一站式安装指南:含纯净安装包下载、无中文/空格路径建议、管理员运行、环境变量配置(JAVA_HOME+Path)及三步验证法,新手照做即成,全程避坑。
733 1
|
5月前
|
人工智能 安全 Devops
Hermes Agent官方可选装Skills整理
Hermes Agent 内置90个技能,官方Skills Hub另提供70+可选技能(已剔除国内不可用项),覆盖AI代理、创意生成、DevOps、MLOps、健康、安全、研究等10余类场景,开箱即用,灵活扩展。
1162 0
|
10月前
|
监控 API Docker
MinerU Docker 部署指南:PDF 结构化解析服务实践
MinerU 是面向开发者与科研用户的 PDF 结构化解析工具,支持将复杂版式、公式符号的科技文献精准转为 Markdown/JSON 等机器可读格式。基于“书生·浦语”大模型预训练需求研发,2.7.0 版本引入 hybrid 后端,融合 pipeline 与 VLM 优势,提升解析精度与多语言 OCR 能力。支持 Docker 部署,提供 vLLM 加速、API 服务与 Gradio 界面,开箱即用,助力科研数据高效处理。
3531 0
|
机器学习/深度学习 存储 人工智能
AI歌姬,C位出道,基于PaddleHub/Diffsinger实现音频歌声合成操作(Python3.10)
懂乐理的音乐专业人士可以通过写乐谱并通过乐器演奏来展示他们的音乐创意和构思,但不识谱的素人如果也想跨界玩儿音乐,那么门槛儿就有点高了。但随着人工智能技术的快速迭代,现在任何一个人都可以成为“创作型歌手”,即自主创作并且让AI进行演唱,极大地降低了音乐制作的门槛。 本次我们基于PaddleHub和Diffsinger实现音频歌声合成操作,魔改歌曲《学猫叫》。
AI歌姬,C位出道,基于PaddleHub/Diffsinger实现音频歌声合成操作(Python3.10)
|
关系型数据库 MySQL Nacos
nacos启动报错 load derby-schema.sql error
这篇文章描述了作者在使用Nacos时遇到的启动错误,错误提示为加载derby-schema.sql失败,作者通过将数据库从Derby更换为MySQL解决了问题。
nacos启动报错 load derby-schema.sql error

热门文章

最新文章