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

#新星杯·14天创作挑战营·第10期#

目录

一. 将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数据库的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封装的工具类
希望本文能够帮助到你😊

评论 49
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值