手动连接mysql_手动实现与数据库的连接
原始的连接方案:
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_手动实现与数据库的连接相关推荐
- jdba怎么连接mysql_一、JAVA通过JDBC连接mysql数据库(连接)
JDBC ----JDBC(Java DataBase Connectivity)是Java与数据库的接口规范,JDBC定义了一个支持标准SQL功能的通用低层的应用程序编程接口(API),它由Java ...
- ftp无法与服务器建立连接_建立与Oracle数据库服务器连接的两种连接模式
建立与Oracle数据库服务器连接的两种连接模式(专用服务器与共享服务器) 在建立Oracle数据库的时候,应该会在数据库建立助手向导上面看到这么一个选项,就是数据库的连接模式采用什么方式.在Orac ...
- java数据库的连接方式_java与各个数据库的连接方式
1.与mysql数据库连接方式 通过配置文件的方式进行获取mysql的username.password.url,等相关数据 //调用jdbc.properties参数文件此时获取的是一个io流的形式 ...
- labview dsn连接mysql_labview使用DSN与数据库的连接包括access,mysql
labview与数据库的连接: labview与上面两种数据库的连接方法基本相同,下面交叉讲述这两种数据库与labview的连接. 当然第一步就是先安装好这两种数据库,对于access数据的安装比较简 ...
- mysql左连接含义_学习笔记-数据库左连接,右连接意义及区别
1.左连接,右连接等的意义及区别: 1)笛卡尔积:CROSS JOIN 要理解各种JOIN首先要理解笛卡尔积.笛卡尔积就是将A表的每一条记录与B表的每一条记录强行拼在一起. 所以,如果A表有n条记录, ...
- linq 连接mysql_使用LINQ访问数据库
1. LINQ to SQL 概览 • 把.NET 类和 SQL 数据通过关系进行映射 • 把 LINQ 查询转化为 SQL 语言进行执行 • 支持对插入,更新,删除操作进行跟踪. 支持实体级别的验证 ...
- python用django连接mysql_三分钟了解Django如何连接Mysql数据库
处理用户注册请求.Django连接MysqL数据库相关配置.数据库迁移命令: my_Dproject/app01/views.py 在views函数文件中添加register函数,来处理用户注册 ...
- 手动配置mysql_手动配置Mysql,无需安装的方法以及Mysql的一些基本命令
以前Mysql都是从网上下载安装的,由于前一段时间研究Wordpress,所以又从新接触到了Mysql,原来Mysql还可以这样免安装,比安装版的灵活多了,即使重装了系统,只需敲几条命令就可以继续使用 ...
- 云虚拟主机连接mysql_云虚拟主机数据库使用
进入数据库 A登录控制台->虚拟主机->数据库,找到对应的数据库 点击 管理 B登录控制台->虚拟主机->云虚拟主机,选择需要创建数据库的云虚拟主机,点击管理,进入主机详情页 ...
- 网上商城连接mysql_操作网上商城数据库与数据表
一. mySQL中gbk和utf8的区别 在MySQL中,如果数据库只需要支持一般中文,数据量很大,性能要求也比较高,那么就最好选择GBK,因为相对于UTF-8而言,GBK占用的空间较小,每个汉字只占 ...
最新文章
- 你没见过Java台式计算机和Java操作系统吧
- iBatis报java.lang.RuntimeException: Error setting property错误
- android遍历拼接字符串,写个批处理脚本帮忙干活---遍历amp;字符串处理
- gdcm::DummyValueGenerator的测试程序
- servlet实现文件上传,预览,下载和删除
- __cdecl __fastcall与 __stdcall 调用约定
- Java从入门到精通——数据库篇Mongo DB 导出,导入,备份
- es6 Generator函数的应用
- 在ASP.NET中防止注入攻击
- 珠江三角洲 芯片恩仇录
- 达摩院李雅亮:大规模预训练模型的压缩和蒸馏
- android渐变效果
- 关于超星脚本出现乱码问题
- c语言习题 编写自定义函数 volume_c,功能是求正方体的体积(要求:正方体的的边长 a 在主函数中做输入,在主函数中调用函数 volume_c,在主函数中输出正方体体积,a 为int 型变量)。
- L2TP/L2TP over IPSec
- CRC校验算法及实现
- 操作系统-信号量机制;用信号量机制实现进程互斥、同步、前驱关系
- pandas数据清洗策略1
- python的循环语句有哪些_python的循环语句
- 部署https证书的端口是什么意思