原始的连接方案:

1 @Test2 public voidtestConnectin1() {3 try{4 //1.创建数据库驱动中对java.sql.Driver抽象类的实现类(即:Driver)的实例化对象

5 Driver driver = newcom.mysql.cj.jdbc.Driver();6 //2.提供connection方法的参数:url,指明具体操作的数据

7 String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8";8 //3.提供connection方法的参数:info,即Properties类的对象,指明用户名和密码

9 Properties info = newProperties();10 info.setProperty("user", "root");11 info.setProperty("password", "password");12 //4.通过调用Driver实现类对象的connection方法获取数据库连接

13 Connection conn =driver.connect(url, info);14 System.out.println(conn);15 } catch(SQLException e) {16 e.printStackTrace();17 }18 }

可优化的地方:第一步显式地使用了第三方的数据库API(即:Driver),因而不具备良好的可移植性和通用性。

改进方案一:可以通过反射的方式动态的创建指定类的实例化对象

1 @Test2 public voidtestConnection2() {3 try{4 //1. 通过反射的方式来创建一个指定类(com.mysql.cj.jdbc.Driver)的实例化对象5   //获取了Class类的对象

6 Class cla = Class.forName("com.mysql.cj.jdbc.Driver");7   //通过Class的实例来创建指定类的实例化对象

8 Driver driver =(Driver) cla.newInstance();9 //2. 提供connection方法的参数:url,指明具体操作的数据

10 String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8";11 //3.提供connection方法的参数:info,即Properties类的对象,指明用户名和密码

12 Properties info = newProperties();13 info.setProperty("user", "root");14 info.setProperty("password", "password");15 //4.通过调用Driver实现类对象的connection方法获取数据库连接

16 Connection conn =driver.connect(url, info);17 System.out.println(conn);18 } catch(Exception e) {19 e.printStackTrace();20 }21 }

改进方案二:使用DriverManager(驱动程序管理器类)替换Driver类

1 @Test2 public voidtestConnection3() {3 try{4 //1. 提供getConnection方法的三个基本参数:

5 String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8";6 String user = "root";7 String password = "password";8 //2. 通过反射的方式来创建一个指定类(com.mysql.cj.jdbc.Driver)的实例化对象

9 Class cla = Class.forName("com.mysql.cj.jdbc.Driver");10 Driver driver =(Driver) cla.newInstance();11 //3. 注册驱动

12 DriverManager.registerDriver(driver);13 //4. 通过DriverManager获取数据库连接

14 Connection conn =DriverManager.getConnection(url, user, password);15 System.out.println(conn);16 } catch(Exception e) {17 e.printStackTrace();18 }19 }

改进方案三:

因为在mysql的驱动中可以发现对 java.sql.Driver 抽象类的实现Driver类中声明有以下的静态代码块:

1 static{2 try{3 DriverManager.registerDriver(newDriver());4 } catch(SQLException var1) {5 throw new RuntimeException("Can't register driver!");6 }7 }

该代码块在我们加载Driver类时执行( Class.forName("com.mysql.cj.jdbc.Driver") )帮我们完成注册驱动。

因此我们不需要自己重复的进行驱动的注册。

1 @Test2 public voidtestConnection4() {3 try{4 //1. 提供getConnection方法的三个基本参数:

5 String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8";6 String user = "root";7 String password = "password";8 //2. 通过反射的方式来创建一个指定类(com.mysql.cj.jdbc.Driver)的实例化对象

9 Class.forName("com.mysql.cj.jdbc.Driver");10 //3. 通过DriverManager获取数据库连接

11 Connection conn =DriverManager.getConnection(url, user, password);12 System.out.println(conn);13 } catch(Exception e) {14 e.printStackTrace();15 }16 }

问题:用于连接的一些基本参数嵌入在代码中不利于代码的维护

最终方案:将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接

将代码中的四个基本参数存放在工程的src目录下单独的 jdbc.properties 文件中:

1 user=root2 password=password3 url=jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8

4 driverClass=com.mysql.cj.jdbc.Driver

1 @Test2 public voidtestConnerction() {3 try{4 //1.加载配置文件(使用getResourceAsStream加载src目录下的配置文件)5 //ClassLoader.getSystemClassLoader() 和 类名.class.getClassLoader(),两种方式都可以获取系统类加载器6 //方式一:调用运行时类的属性(.class)来获取Class对象

7 InputStream is = ConnectionTestCopy.class.getClassLoader().getResourceAsStream("jdbc.properties");8 //方式二:ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties")

9 Properties pros = newProperties();10 pros.load(is);11 //读取配置文件中的信息

12 String user = pros.getProperty("user");13 String password = pros.getProperty("password");14 String url = pros.getProperty("url");15 String driverClass = pros.getProperty("driverClass");16 //加载驱动

17 Class.forName(driverClass);18 //获取连接

19 Connection conn =DriverManager.getConnection(url, user, password);20 System.out.println(conn);21 } catch(Exception e) {22 e.printStackTrace();23 }24 }

手动连接mysql_手动实现与数据库的连接相关推荐

  1. jdba怎么连接mysql_一、JAVA通过JDBC连接mysql数据库(连接)

    JDBC ----JDBC(Java DataBase Connectivity)是Java与数据库的接口规范,JDBC定义了一个支持标准SQL功能的通用低层的应用程序编程接口(API),它由Java ...

  2. ftp无法与服务器建立连接_建立与Oracle数据库服务器连接的两种连接模式

    建立与Oracle数据库服务器连接的两种连接模式(专用服务器与共享服务器) 在建立Oracle数据库的时候,应该会在数据库建立助手向导上面看到这么一个选项,就是数据库的连接模式采用什么方式.在Orac ...

  3. java数据库的连接方式_java与各个数据库的连接方式

    1.与mysql数据库连接方式 通过配置文件的方式进行获取mysql的username.password.url,等相关数据 //调用jdbc.properties参数文件此时获取的是一个io流的形式 ...

  4. labview dsn连接mysql_labview使用DSN与数据库的连接包括access,mysql

    labview与数据库的连接: labview与上面两种数据库的连接方法基本相同,下面交叉讲述这两种数据库与labview的连接. 当然第一步就是先安装好这两种数据库,对于access数据的安装比较简 ...

  5. mysql左连接含义_学习笔记-数据库左连接,右连接意义及区别

    1.左连接,右连接等的意义及区别: 1)笛卡尔积:CROSS JOIN 要理解各种JOIN首先要理解笛卡尔积.笛卡尔积就是将A表的每一条记录与B表的每一条记录强行拼在一起. 所以,如果A表有n条记录, ...

  6. linq 连接mysql_使用LINQ访问数据库

    1. LINQ to SQL 概览 • 把.NET 类和 SQL 数据通过关系进行映射 • 把 LINQ 查询转化为 SQL 语言进行执行 • 支持对插入,更新,删除操作进行跟踪. 支持实体级别的验证 ...

  7. python用django连接mysql_三分钟了解Django如何连接Mysql数据库

    处理用户注册请求.Django连接MysqL数据库相关配置.数据库迁移命令: my_Dproject/app01/views.py    在views函数文件中添加register函数,来处理用户注册 ...

  8. 手动配置mysql_手动配置Mysql,无需安装的方法以及Mysql的一些基本命令

    以前Mysql都是从网上下载安装的,由于前一段时间研究Wordpress,所以又从新接触到了Mysql,原来Mysql还可以这样免安装,比安装版的灵活多了,即使重装了系统,只需敲几条命令就可以继续使用 ...

  9. 云虚拟主机连接mysql_云虚拟主机数据库使用

    进入数据库 A登录控制台->虚拟主机->数据库,找到对应的数据库 点击 管理 B登录控制台->虚拟主机->云虚拟主机,选择需要创建数据库的云虚拟主机,点击管理,进入主机详情页 ...

  10. 网上商城连接mysql_操作网上商城数据库与数据表

    一. mySQL中gbk和utf8的区别 在MySQL中,如果数据库只需要支持一般中文,数据量很大,性能要求也比较高,那么就最好选择GBK,因为相对于UTF-8而言,GBK占用的空间较小,每个汉字只占 ...

最新文章

  1. 你没见过Java台式计算机和Java操作系统吧
  2. iBatis报java.lang.RuntimeException: Error setting property错误
  3. android遍历拼接字符串,写个批处理脚本帮忙干活---遍历amp;字符串处理
  4. gdcm::DummyValueGenerator的测试程序
  5. servlet实现文件上传,预览,下载和删除
  6. __cdecl __fastcall与 __stdcall 调用约定
  7. Java从入门到精通——数据库篇Mongo DB 导出,导入,备份
  8. es6 Generator函数的应用
  9. 在ASP.NET中防止注入攻击
  10. 珠江三角洲 芯片恩仇录
  11. 达摩院李雅亮:大规模预训练模型的压缩和蒸馏
  12. android渐变效果
  13. 关于超星脚本出现乱码问题
  14. c语言习题 编写自定义函数 volume_c,功能是求正方体的体积(要求:正方体的的边长 a 在主函数中做输入,在主函数中调用函数 volume_c,在主函数中输出正方体体积,a 为int 型变量)。
  15. L2TP/L2TP over IPSec
  16. CRC校验算法及实现
  17. 操作系统-信号量机制;用信号量机制实现进程互斥、同步、前驱关系
  18. pandas数据清洗策略1
  19. python的循环语句有哪些_python的循环语句
  20. 部署https证书的端口是什么意思

热门文章

  1. HTML:select、option中设置默认值,且默认值不在下拉框中出现
  2. Pannellum:实例之通过全景图游览
  3. 全国计算机等级考试在线报名,全国计算机等级考试网上报考具体流程
  4. python_图像去畸变/图像矫正
  5. C#图像处理初学之平移和镜像
  6. java线程从没入门就放弃
  7. EF的注解Annotation和Fluent API
  8. Cockroachdb 三、副本设置
  9. 多值(in),范围值(between..and)
  10. sync Command in Unix