JDBC连接的方式

引入

五种方式之间是渐进迭代关系,前4种连接方式有助于理解jdbc连接的实质,实际开发中采用最后一种方式

一、方式一

  1. 通过第三方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);}
    
  2. 存在弊端

    出现了第三方API,影响了Java程序的可移植性,所以不希望出现通过第三方API执行的代码

    解决方法:通过放射,包裹第三方API中的类,可以在实现其功能的同时还可以对其进行动态变更,于是迭代为了方式二

二、方式二

  1. 通过反射的方式进行连接
     @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);}
    
  2. 优势

    不出现第三方的API,使程序具有更好的移植性

  3. 实际开发中

    使用的是DriverManager类替代Driver类

三、方式三

  1. 使用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);}
    

四、方式四

  1. 对方式三进行优化,只需加载,不需注册
    @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);}
    
  2. 对于连接MySQL,其实第二步也可以省去,原因如下:

  3. 实际开发中

    从通过反射加载各类数据库的角度来说,这一步不能省,因为我们不一定连接MySQL数据库

  4. 缺陷

    暴露了很多信息,且达不到数据与程序分离的效果

五、方式五(最终版)

  1. 新建jdbc.properties文件,将连接数据库所需的四个信息存储在配置文件中

    新建properties文件的方法见该博文末尾处(Java六十一: Java 集合 - -Map接口),

    注意,properties文件创建在src文件下,并非模块下,因为从后期JavaWEB的角度来说,如果把properties文件加载在模块下,那么在部署到Tomcat服务器时,properties文件就缺失了

  2. 通过加载配置文件的方式进行数据库连接
     @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);}
    
  3. 优势

    ① 实现了数据与代码的分离,实现了解耦

    ② 程序写完后要部署到Tomcat服务器上时,需要对程序进行打包,如果连接数据库的四个基本信息有一个要变动(比如更换数据库名),那么直接在配置文件修改即可,避免了程序重新打包浪费时间和资源

JDBC二:连接方式相关推荐

  1. jdbc 的连接方式 thin, oci

    os: centos 7.6 db: oracle 19.3 jdbc 连接 oracle 有两种常见方式,thin 和 coi. 开发人员一般配置的都是 thin 方式,简单. thin thin ...

  2. java jdbc数据库五种连接方式

    jdbc数据库连接方式(迭代) 方式五为最终版本 方式一 @Testpublic void testConnection() throws SQLException { // 1.获取Driver的实 ...

  3. 转:ORACLE的JDBC连接方式:OCI和THIN

    oracle的jdbc连接方式:oci和thin oci和thin是Oracle提供的两套Java访问Oracle数据库方式. thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracl ...

  4. Jdbc连接mysql的五种连接方式

    一:五种连接方式 直接上码 package com.wyjedu.jdbc;import com.mysql.jdbc.Driver;import java.io.FileInputStream; i ...

  5. orcle数据库代码连接方式(jdbc:oracle:thin:@192.168.3.98:1521:orcl)

    一. jdbc:oracle:thin:@192.168.3.98:1521:orcl jdbc:表示采用jdbc方式连接数据库 oracle:表示连接的是oracle数据库 thin:表示连接时采用 ...

  6. arcserver连接oracle,ArcSDE的二种连接方式(应用服务器连接,直接连接)

    ArcSDE的二种连接方式(应用服务器连接,直接连接) (2013-08-26 09:28:42) 以oracle数据库为例说明: 解释一: ArcSDE的二种连接方式--估且称为客户端负载连接方式和 ...

  7. JDBC 与 JNDI 这两种连接方式 区别

    jdbc(Java Data Base Connectivity)是数据库中间代理商为了是java连接数据库而定的一个协议 或者说是方法,通过jdbc-odbc的方法进行数据库连接,是连接一次创建一次 ...

  8. 项目案例模板之jdbc两种连接方式

    项目案例模板之jdbc两种连接方式 第一种连接方式 JDBCUtils.java package jdbc;​import org.junit.jupiter.api.Test;​import jav ...

  9. Revit二次开发神技---代码实现Revit所有连接方式

    Revit二次开发神技-代码实现Revit所有连接方式 读完此贴,你将能够实现Revit中已存在的不管是梁.柱.还是支撑的所有连接方式. 发帖十分钟,研究数小时,发帖不易,且读且珍惜. 代码: /// ...

最新文章

  1. Kali Linux
  2. 1470. Shuffle the Array
  3. 洛谷 P2341 [HAOI2006]受欢迎的牛 解题报告
  4. linux ss命令详解
  5. 关于Stm32定时器+ADC+DMA进行AD采样的实现
  6. Shell脚本笔记(二)Shell变量
  7. JAVA数组元素的遍历_Java数组元素的遍历
  8. hibernate-annotation
  9. spring的依赖注入的方式(待更新)
  10. 亲测可用|奥维互动地图加载谷歌地图等图源的方法
  11. 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第六节课笔记
  12. 微信小程序连续签到获得积分
  13. php格式转为jpg格式,php实现图片格式转换
  14. uip-0[1].6中文说明
  15. php文件 怎么写韩文,php插入韩文txt文件内的数据,SQL-Front显示乱码
  16. 【Python】Jupyter中.ipynb如何转换为.py文件
  17. ACM recsys十年回顾(转载)
  18. (荐)跟我学SpringMVC目录汇总贴、PDF下载、源码下载
  19. 阅读新闻页面绑定新闻评论+添加评论+删除评论+admin页面数据分页
  20. 完全去中心化的调度系统Tiger

热门文章

  1. 制定项目计划,确保团队协同效率
  2. I Like It Heavy --翻译_习惯累积沉淀_新浪博客
  3. 实训十五:路由器RIPV1配置
  4. MySQL - 思维导图
  5. jplayer - html5视频播放器插件
  6. 思岚机器人移动底盘传感器位置坐标及底盘配置工具的使用说明
  7. 史上最强清除破解Windows XP登录密码的方法!
  8. WebSphere V8.5 静默安装升级(一)-独立安装每个安装包
  9. python实验收获与反思 100字_实验心得体会及收获
  10. python+pyqt5实现RPG游戏角色生成器