JDBC二:连接方式
JDBC连接的方式
引入
五种方式之间是渐进迭代关系,前4种连接方式有助于理解jdbc连接的实质,实际开发中采用最后一种方式
一、方式一
通过第三方API中的实现类进行数据库连接
@Testpublic void testConnection1() throws Exception {/*1.创建Driver实例对象,为调用连接数据库的方法connect做准备java.sql.Driver是接口,需要利用导入的jar包中的Driver类实现该接口com.mysql.cj.jdbc中Driver类的的源码public class Driver extends NonRegisteringDriver implements java.sql.Driver {*/java.sql.Driver driver = new com.mysql.cj.jdbc.Driver();/*2.连接数据库的路径url:统一资源定位系统(uniform resource locator)jdbc:mysql:协议localhost:IP地址3306:MySQL默认端口号atguigudb:具体的数据库名*/String url = "jdbc:mysql://localhost:3306/atguigudb?serverTimezone=UTC&useSSL=false";/*3.连接数据库的用户名和密码用户名和密码封装在Properties中*/Properties info = new Properties();info.setProperty("user","root");info.setProperty("password","********");// 4.调用connect方法连接数据库Connection conn = driver.connect(url, info);// 查看连接情况,输出:com.mysql.cj.jdbc.ConnectionImpl@50a7bc6eSystem.out.println(conn);}
存在弊端
出现了第三方API,影响了Java程序的可移植性,所以不希望出现通过第三方API执行的代码
解决方法:通过放射,包裹第三方API中的类,可以在实现其功能的同时还可以对其进行动态变更,于是迭代为了方式二
二、方式二
通过反射的方式进行连接
@Testpublic void testConnection2() throws Exception {// 1.通过反射获取Driver实现类对象Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");Driver driver = (Driver) clazz.newInstance();// 2.提供要连接的数据库的路径String url = "jdbc:mysql://localhost:3306/atguigudb?serverTimezone=UTC&useSSL=false";// 3.提过连接需要的用户名和密码Properties info = new Properties();info.setProperty("user","root");info.setProperty("password","********");// 4.获取连接Connection conn = driver.connect(url, info);System.out.println(conn);}
优势
不出现第三方的API,使程序具有更好的移植性
实际开发中
三、方式三
使用DriverManager类替换Driver类
@Testpublic void testConnection3() throws Exception {// 1.通过反射获取Driver实现类对象Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");Driver driver = (Driver) clazz.newInstance();// 2.提供连接所需要的三个基本信息String url = "jdbc:mysql://localhost:3306/atguigudb?serverTimezone=UTC&useSSL=false";String user = "root";String password = "********";// 3.注册驱动DriverManager.registerDriver(driver);// 4.获取连接Connection conn = DriverManager.getConnection(url, user, password);System.out.println(conn);}
四、方式四
对方式三进行优化,只需加载,不需注册
@Testpublic void testConnection4() throws Exception {// 1.提供连接所需要的三个基本信息String url = "jdbc:mysql://localhost:3306/atguigudb?serverTimezone=UTC&useSSL=false";String user = "root";String password = "********";/*2.仅需利用反射加载第三方jar包下的Driver类因为在com.mysql.cj.jdbc.Driver的源码中,存在如下静态代码块static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}故在加载com.mysql.cj.jdbc包下的Driver类时,就自动调用了java.sql包下的DriverManager.registerDriver(new Driver())的注册方法*/Class.forName("com.mysql.cj.jdbc.Driver");// 3.连接数据库Connection conn = DriverManager.getConnection(url, user, password);System.out.println(conn);}
对于连接MySQL,其实第二步也可以省去,原因如下:
实际开发中
缺陷
暴露了很多信息,且达不到数据与程序分离的效果
五、方式五(最终版)
新建jdbc.properties文件,将连接数据库所需的四个信息存储在配置文件中
新建properties文件的方法见该博文末尾处(Java六十一: Java 集合 - -Map接口),
通过加载配置文件的方式进行数据库连接
@Testpublic void testConnection5() throws Exception {// 1.读取配置文件中的四个基本信息InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties ps = new Properties();ps.load(is);String url = ps.getProperty("url");String user = ps.getProperty("user");String password = ps.getProperty("password");String driver = ps.getProperty("driver");// 2.创建Driver类Class.forName(driver);// 3.连接数据库Connection conn = DriverManager.getConnection(url, user, password);System.out.println(conn);}
优势
① 实现了数据与代码的分离,实现了解耦
② 程序写完后要部署到Tomcat服务器上时,需要对程序进行打包,如果连接数据库的四个基本信息有一个要变动(比如更换数据库名),那么直接在配置文件修改即可,避免了程序重新打包浪费时间和资源
JDBC二:连接方式相关推荐
- jdbc 的连接方式 thin, oci
os: centos 7.6 db: oracle 19.3 jdbc 连接 oracle 有两种常见方式,thin 和 coi. 开发人员一般配置的都是 thin 方式,简单. thin thin ...
- java jdbc数据库五种连接方式
jdbc数据库连接方式(迭代) 方式五为最终版本 方式一 @Testpublic void testConnection() throws SQLException { // 1.获取Driver的实 ...
- 转:ORACLE的JDBC连接方式:OCI和THIN
oracle的jdbc连接方式:oci和thin oci和thin是Oracle提供的两套Java访问Oracle数据库方式. thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracl ...
- Jdbc连接mysql的五种连接方式
一:五种连接方式 直接上码 package com.wyjedu.jdbc;import com.mysql.jdbc.Driver;import java.io.FileInputStream; i ...
- orcle数据库代码连接方式(jdbc:oracle:thin:@192.168.3.98:1521:orcl)
一. jdbc:oracle:thin:@192.168.3.98:1521:orcl jdbc:表示采用jdbc方式连接数据库 oracle:表示连接的是oracle数据库 thin:表示连接时采用 ...
- arcserver连接oracle,ArcSDE的二种连接方式(应用服务器连接,直接连接)
ArcSDE的二种连接方式(应用服务器连接,直接连接) (2013-08-26 09:28:42) 以oracle数据库为例说明: 解释一: ArcSDE的二种连接方式--估且称为客户端负载连接方式和 ...
- JDBC 与 JNDI 这两种连接方式 区别
jdbc(Java Data Base Connectivity)是数据库中间代理商为了是java连接数据库而定的一个协议 或者说是方法,通过jdbc-odbc的方法进行数据库连接,是连接一次创建一次 ...
- 项目案例模板之jdbc两种连接方式
项目案例模板之jdbc两种连接方式 第一种连接方式 JDBCUtils.java package jdbc;import org.junit.jupiter.api.Test;import jav ...
- Revit二次开发神技---代码实现Revit所有连接方式
Revit二次开发神技-代码实现Revit所有连接方式 读完此贴,你将能够实现Revit中已存在的不管是梁.柱.还是支撑的所有连接方式. 发帖十分钟,研究数小时,发帖不易,且读且珍惜. 代码: /// ...
最新文章
- Kali Linux
- 1470. Shuffle the Array
- 洛谷 P2341 [HAOI2006]受欢迎的牛 解题报告
- linux ss命令详解
- 关于Stm32定时器+ADC+DMA进行AD采样的实现
- Shell脚本笔记(二)Shell变量
- JAVA数组元素的遍历_Java数组元素的遍历
- hibernate-annotation
- spring的依赖注入的方式(待更新)
- 亲测可用|奥维互动地图加载谷歌地图等图源的方法
- 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第六节课笔记
- 微信小程序连续签到获得积分
- php格式转为jpg格式,php实现图片格式转换
- uip-0[1].6中文说明
- php文件 怎么写韩文,php插入韩文txt文件内的数据,SQL-Front显示乱码
- 【Python】Jupyter中.ipynb如何转换为.py文件
- ACM recsys十年回顾(转载)
- (荐)跟我学SpringMVC目录汇总贴、PDF下载、源码下载
- 阅读新闻页面绑定新闻评论+添加评论+删除评论+admin页面数据分页
- 完全去中心化的调度系统Tiger