环境搭建

使用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 数据库连接的演变的更多相关文章

  1. JAVA jdbc获取数据库连接

    JDBC获取数据库连接的帮助类 import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManage ...

  2. Java -- JDBC 学习--数据库连接池

    JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模式开 ...

  3. 数据库连接JDBC和数据库连接池C3P0自定义的java封装类

    数据库连接JDBC和数据库连接池C3P0自定义的java封装类 使用以下的包装类都需要自己有JDBC的驱动jar包: 如 mysql-connector-java-5.1.26-bin.jar(5.1 ...

  4. Java jdbc数据库连接池总结!(转)

    1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的 ...

  5. Java Web(九) JDBC及数据库连接池及DBCP,c3p0,dbutils的使用

    DBCP.C3P0.DBUtils的jar包和配置文件(百度云盘):点我下载 JDBC JDBC(Java 数据库连接,Java Database Connectify)是标准的Java访问数据库的A ...

  6. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  7. Java JDBC高级特性

    1.JDBC批处理 实际开发中需要向数据库发送多条SQL语句,这时,如果逐条执行SQL语句,效率会很低,因此可以使用JDBC提供的批处理机制.Statement和PreparedStatemen都实现 ...

  8. Java JDBC下执行SQL的不同方式、参数化预编译防御

    相关学习资料 http://zh.wikipedia.org/wiki/Java数据库连接 http://lavasoft.blog.51cto.com/62575/20588 http://blog ...

  9. java jdbc使用配置文件连接数据库:

    java jdbc使用配置文件连接数据库: 创建后缀名为:.properties的文件,文件内容包括,数据库驱动.连接的数据库地址.用户名.密码…… 以Mysql为例创建config.properti ...

  10. java jdbc ResultSet结果通过java反射赋值给java对象

    在不整合框架的情况下,使用jdbc从数据库读取数据时都得一个个的get和set,不仅累代码还显得不简洁,所以利用java的反射机制写了一个工具类,这样用jdbc从数据库拿数据的时候就不用那么麻烦了. ...

随机推荐

  1. Qt信号与槽的使用

    参考视频:黑马程序员https://www.bilibili.com/video/BV1XW411x7NU?p=4 1  新建工程 先创建一个控件基础工程,创建后的界面如下: 主函数我们不需要修改,就 ...

  2. minos 1.2 内存虚拟化——guest

    首发公号:Rand_cs minos 1.2 内存虚拟化--guest 项目来自乐敏大佬:https://github.com/minosproject/minos 本文继续讲述 minos 中的内存 ...

  3. xv6 内核空间共享

    首发公号:Rand_cs 共享内核空间 我们常说,每个进程都有自己的虚拟地址空间,但其中内核部分是共享的. 这就有个问题,如何共享的? 系统启动时创建了一张内核页表,里面记录着内核地址空间与物理地址空 ...

  4. EF,lambda 反向模糊查询

    SELECT * FROM table as t WHERE "张三的偶像" LIKE t.userName; bool thisMchBelong = _mch_blackSer ...

  5. 流程控制之case

    1.case语句作用 case和if一样,都是用于处理多分支的条件判断 但是在条件较多的情况,if嵌套太多就不够简洁了 case语句就更简洁和规范了 2.case用法参考 常见用法就是如根据用户输入的 ...

  6. babel 基础概念 & 从零到一写一个 babel 插件

    babel 基础概念 简单来说,做语法转换兼容的, 复杂一点的说,babel可以将我们写的 ES6+ 的Javascript语法转换为向后兼容的语法,以便能够在旧版本的浏览器或者其他环境运行. bab ...

  7. http请求方式-RestTemplate

    http请求方式-RestTemplate import com.alibaba.fastjson.JSON; import com.example.core.mydemo.http.OrderReq ...

  8. Lecture4

    Smiling & Weeping ---- 行于山水之间 权且停留 无所谓风起叶落,浮光敛形 此刻   身即自由 第四章 Git 工具 Author: Martin 本章主要介绍 Git 常 ...

  9. Ajax分析与爬取实战

    Ajax 分析与爬取实战 准备工作 安装好 Python3 了解 Python HTTP 请求库 requests 的基本用法 了解 Ajax 基础知识和分析 Ajax 的基本方法 爬取目标 以一个示 ...

  10. golang模拟键盘输入字符串

    介绍 仅供学习使用哈,不要用来开gua. 代码仓库:https://github.com/GuoFlight/gkeybd (本人仓库,欢迎留言) 注意事项 只支持英文 使用前请切换到英文输入法.因为 ...