【Java】JDBC Part1 数据库连接的演变
环境搭建
使用Maven工程的依赖项,如果普通工程就点注释的地址下载jar包即可
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency> <!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
原始JDBC链接
@Test
public void connectionTest1() throws SQLException {
// 获取驱动对象
// 这是8+版本的驱动,5+版本的驱动是这样的com.mysql.jdbc.Driver
Driver driver = new com.mysql.cj.jdbc.Driver(); // 注入连接信息 这也是8+的链接方式,必须声明时区,5+版本 jdbc:mysql://localhost:3306/mysql
String url = "jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai"; // 协议 jdbc:mysql:
// 地址 localhost:
// MySQL端口号 3306
// 数据库 mysql
// 参数 serverTimezone=Asia/Shanghai" // 配置对象封装账户信息
Properties properties = new Properties();
properties.setProperty("user","root");
properties.setProperty("password","123456"); // 注入信息,得到链接
Connection connection = driver.connect(url,properties); //com.mysql.cj.jdbc.ConnectionImpl@1d548a08
System.out.println(connection);
}
演变1 利用反射调取实现类创建驱动实例
@Test // 提升可移植性,面向接口编程,不要出现第三方的API
public void connectionTest2() throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException {
//使用反射动态,获取Driver实现类对象
Class<?> driverClass = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) driverClass.newInstance(); String url = "jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai"; Properties properties = new Properties();
properties.setProperty("user","root");
properties.setProperty("password","123456"); Connection connection = driver.connect(url,properties); System.out.println(connection);
}
演变2 利用驱动管理者实现
@Test // 用驱动管理者代替驱动对象
public void connectionTest3() throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException { Class<?> driverClass = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) driverClass.newInstance(); // 驱动注册
java.sql.DriverManager.registerDriver(driver); String url = "jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai";
String user = "root";
String password = "123456"; // 用驱动管理者配置链接信息去获取连接对象
Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection);
}
演变3 驱动优化
@Test // 驱动再优化
public void connectionTest4() throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException {
// 注册驱动已经不需要我们来编写了
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai";
String user = "root";
String password = "123456";
// 用驱动管理者配置链接信息去获取连接对象
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
演变4 驱动完全不需要写了 jdbc5+版本支持此写法
@Test // 驱动再再优化 在5+版本已经不需要驱动这玩意儿了
public void connectionTest4() throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException {
String url = "jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai";
String user = "root";
String password = "123456";
// 用驱动管理者配置链接信息去获取连接对象
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
演示5 配置信息不再使用硬编码的方式注入
配置可随意更改,实现了数据和代码的解耦
@Test //
public void connectionTest5() throws SQLException, ClassNotFoundException, IOException {
InputStream inputStream = ConnectorTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties properties = new Properties();
properties.load(inputStream); String driverClass = properties.getProperty("driverClass");
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password"); //加载驱动
Class.forName(driverClass);
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
在Maven工程,配置文件放在sources里面
在生成打包文件时,自动生成对应的配置文件

非Maven的普通项目可采用下面这两种方式读取配置文件
@Test
public void connectionTest6() throws SQLException, ClassNotFoundException, IOException {
// 返回URL的编码 %20 类加载器读取 文件的位置默认是在当前Module或者项目的src包下
String path = Loader.class.getClassLoader().getResource("jdbc.properties").getFile();
// 需要解码
String decode = URLDecoder.decode(path, "UTF-8");
System.out.println(path);
System.out.println(decode);
Properties properties = new Properties();
properties.load(new FileInputStream(decode)); String driverClass = properties.getProperty("driverClass");
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password"); //加载驱动
Class.forName(driverClass);
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
} @Test //
public void connectionTest7() throws SQLException, ClassNotFoundException, IOException { Properties properties = new Properties();
properties.load(new FileInputStream("src\\jdbc.properties")); String driverClass = properties.getProperty("driverClass");
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password"); //加载驱动
Class.forName(driverClass);
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
【Java】JDBC Part1 数据库连接的演变的更多相关文章
- JAVA jdbc获取数据库连接
JDBC获取数据库连接的帮助类 import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManage ...
- Java -- JDBC 学习--数据库连接池
JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模式开 ...
- 数据库连接JDBC和数据库连接池C3P0自定义的java封装类
数据库连接JDBC和数据库连接池C3P0自定义的java封装类 使用以下的包装类都需要自己有JDBC的驱动jar包: 如 mysql-connector-java-5.1.26-bin.jar(5.1 ...
- Java jdbc数据库连接池总结!(转)
1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的 ...
- Java Web(九) JDBC及数据库连接池及DBCP,c3p0,dbutils的使用
DBCP.C3P0.DBUtils的jar包和配置文件(百度云盘):点我下载 JDBC JDBC(Java 数据库连接,Java Database Connectify)是标准的Java访问数据库的A ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
- Java JDBC高级特性
1.JDBC批处理 实际开发中需要向数据库发送多条SQL语句,这时,如果逐条执行SQL语句,效率会很低,因此可以使用JDBC提供的批处理机制.Statement和PreparedStatemen都实现 ...
- Java JDBC下执行SQL的不同方式、参数化预编译防御
相关学习资料 http://zh.wikipedia.org/wiki/Java数据库连接 http://lavasoft.blog.51cto.com/62575/20588 http://blog ...
- java jdbc使用配置文件连接数据库:
java jdbc使用配置文件连接数据库: 创建后缀名为:.properties的文件,文件内容包括,数据库驱动.连接的数据库地址.用户名.密码…… 以Mysql为例创建config.properti ...
- java jdbc ResultSet结果通过java反射赋值给java对象
在不整合框架的情况下,使用jdbc从数据库读取数据时都得一个个的get和set,不仅累代码还显得不简洁,所以利用java的反射机制写了一个工具类,这样用jdbc从数据库拿数据的时候就不用那么麻烦了. ...
随机推荐
- 安装图形化界面时候报错 Transaction check error: file /boot/efi/EFI/centos from install of fwupdate-efi-12-5.el7.centos.x86_64 conflicts with file from package grub2-common-1:2.02-0.65.el7.centos.2.noarch
报错 Transaction check error:file /boot/efi/EFI/centos from install of fwupdate-efi-12-5.el7.centos.x8 ...
- SELinux(一) 简介
首发公号:Rand_cs 前段时间的工作遇到了一些关于 SELinux 的问题,初次接触不熟悉此概念,导致当时配置策略时束手束脚,焦头烂额,为此去系统的学习了下 SELinux 的东西.聊 SELin ...
- 【简写Mybatis-02】注册机的实现以及SqlSession处理
前言 注意: 学习源码一定一定不要太关注代码的编写,而是注意代码实现思想: 通过设问方式来体现代码中的思想:方法:5W+1H 源代码: https://gitee.com/xbhog/mybatis- ...
- CentOS7打开终端快捷键
点击右上角的用户名,选择设置>>键盘>>快捷键,然后点+,名称自己写,命令是"/usr/bin/gnome-terminal",这个是不能改的,再点应用,这 ...
- 大一统的监控探针采集器 cprobe
需求背景 监控数据采集领域,比如 Prometheus 生态有非常多的 Exporter,虽然生态繁荣,但是无法达到开箱即用的大一统体验,Exporter 体系的核心问题有: 良莠不齐:有的 Expo ...
- Redis八股文(大厂面试真题)
号:tutou123com我是小宋编码,Java程序员 ,只熬夜但不秃头. 关注我,带你轻松过面试.提升简历亮点如果你觉得对你有帮助,欢迎关注[1] 内容目录 1.说说redis,了解redis源码 ...
- 【译】Visual Studio 2022 - 17.10 性能增强
我们很高兴地宣布 Visual Studio 2022 的最新更新,它为您带来了 IDE 各个领域的一系列性能增强.在这篇博客中,我们将重点介绍17.10版本中一些最显著的改进,比如更快的 Windo ...
- Cython编译报错“numpy/arrayobject.h: No such file or directory”解决方案
问题背景 Cython是用来加速Python程序性能的一个工具,其基本使用逻辑就是将类Python代码(*.pyx扩展格式)编译成\(*.c,*.so\)动态链接库文件,然后就可以在正常的Python ...
- ARM GIC 系列文章学习(转)
原文来自:骏的世界 ARM GIC(一) cortex-A 处理器中断简介 对于ARM的处理器,中断给处理器提供了触觉,使处理器能够感知到外界的变化,从而实时的处理.本系列博文,是以ARM corte ...
- 你要的AI Agent工具都在这里
只有让LLM(大模型)学会使用工具,才能做出一系列实用的AI Agent,才能发挥出LLM真正的实力.本篇,我们让AI Agent使用更多的工具,比如:外部搜索.分析CSV.文生图.执行代码等. 1. ...