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

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

目录

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

 1. 准备工作

2. 复制到Java项目

二. 获取数据库连接

1. 连接Mysql数据库的URL

2. 连接数据库的用户名

3. 连接数据库的密码

 4. 通过反射实例化

三. Properties文件用法

1. properties文件介绍

2. Properties工具类

a. load( InputStream is )

b. getProperty( String key )

3. 新建Properties文件

4. 解决文件中文问题

5. properties文件写法

四. 使用properties文件优化连接

1. 基本操作

a. 实例化Properties对象

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

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

d. 获取properties文件中的内容

2. 优化获取数据库连接

a. properties文件内容

b. 获取连接

五. 封装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.15.1.x
5.55.1.x、5.2.x
5.65.1.x、5.2.x、5.6.x
5.75.1.x、5.2.x、5.6.x、5.7.x
8.05.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数据库的URLString 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);// 获取连接数据库的urlString url = prop.getProperty("url");// 获取连接数据库的用户名String name = prop.getProperty("username");// 获取连接数据库的密码String pwd = prop.getProperty("pwd");// 获取数据库驱动全名String drivername = prop.getProperty("driver");// 加载并注册驱动,获得DriverManagerClass.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);// 获取连接数据库的urlurl = 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();}}// 关闭ResultSetpublic 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){// 先关闭ResultSetcloseResultSet(resultSet);// 再闭Statement对象closeStatement(statement);// 最后关闭Connection对象closeConnection(connection);}
}

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

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

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

相关文章:

  • 《JVM考古现场(二十三):归零者·重启奇点的终极奥义》
  • 若依(笔记)
  • React-请勿在循环或者条件语句中使用hooks
  • 触发器(详解)
  • LNA设计
  • linux学习 5 正则表达式及通配符
  • .net core web api 数据验证(DataAnnotations)
  • Python concurrent包介绍
  • 19-算法打卡-哈希表-四数相加II-leetcode(454)-第十九天
  • leetcode哈希表(六)-三数相加
  • C++ 数学算法全解析(二):解方程与三角函数实用指南
  • deekseak 本地windows 10 部署步骤
  • 网络编程 - 4 ( TCP )
  • RoBoflow数据集的介绍
  • 对美团leaf的初步学习
  • 深度解析 SOA:架构原理、核心优势与实践挑战
  • Firewalld防火墙
  • 基于Python Django 的全国房价大数据可视化系统(附源码,部署)
  • 使用docker在manjaro linux系统上运行windows和ubuntu
  • JDOM处理XML:Java程序员的“乐高积木2.0版“
  • 前瞻2025丨无糖茶,站在转折点?
  • 中汽协发布规范驾驶辅助宣传与应用倡议书
  • 2025年青年普法志愿者法治文化基层行活动启动
  • 辽宁一季度GDP为7606.9亿元,同比增长5.2%
  • 融创中国披露二次境外债重组方案:总规模约95.5亿美元债全额转股权,孙宏斌部分受限股票6年内不得处置
  • “80后”李建强已任内蒙古镶黄旗委书记