JDBC技术(MySQL)之建立数据库连接

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 笔记

一、加载驱动程序


在编程实现数据库连接时,JVM必须先加载特定厂商提供的数据库驱动程序。使用Class.forName()方 法实现驱动程序加载过程

不同驱动程序的装载方法如下:

//JDBC-ODBC桥接,Java自带
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
//数据库厂商提供
Class.forName("特定的JDBC驱动程序类名");

例如加载MySQL驱动程序代码如下:

Class.forName("com.mysql.jdbc.Driver");

问题:在运行时有时会抛出这个东西

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

解决方法:

Class.forName("com.mysql.cj.jdbc.Driver");

如果直接这样运行程序会抛出如下的ClassNotFoundException异常。

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

原因是程序无法找到MySQL驱动程序com.mysql.jdbc.Driver类。MySQL驱动程序是在MySQL的Connector.J X文件中的mysql-connector-java-xxx.jar文件中,也就是说需要导入这个jar包。


导入这个jar包具体操作见链接https://blog.csdn.net/weixin_45366499/article/details/104579591


这里有一个测试代码:

public class HelloWorld {
    public static void main(String[] args) {
//        加载驱动程序
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("驱动程序加载成功");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("驱动程序加载失败");
            return;
        }
    }
}

二、建立数据连接


驱动程序加载成功就可以进行数据库连接了。建立数据库连接可以通过调用DriverManager类的 **getConnection()**方法实现。


static Connection getConnection(String url):尝试通过一个URL建立数据库连接,调用此方法时,DriverManager会试图从已注册的驱动中选择恰当的驱动来建立连接。

static Connection getConnection(String url,Properties info):尝试通过一个URL建立数据库连接,一些连接参数(如user和password)可以按照键值对的形式放置到info中,Properties是Hashtable的子类,它是一种Map结构。

static Connection getConnection(String url, String user, String password):尝试通过一个URL建立数据库连接,指定数据库用户名和密码。

上面的几个getConnection()方法都会抛出受检查的SQLException异常,注意处理这些异常。


JDBC的URL类似于其他场合的URL,它的语法如下:

jdbc:<subprotocol>:<subname>

这里有三个部分,它们用冒号隔离。


协议:jdbc表示协议,它是唯一的,JDBC只有这一种协议。

子协议:主要用于识别数据库驱动程序,也就是说,不同的数据库驱动程序的子协议不同。

子名:它属于专门的驱动程序,不同的专有驱动程序可以采用不同的实现。

对于不同的数据库,厂商提供的驱动程序和连接的URL都不同,如图总结:1.png

以MySQL为例,他的URL为

url = "jdbc:mysql://localhost:3306/数据库名"

建立数据连接示例代码如下(第一种写法):

mport java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/2/29
 * @time : 4:21 下午
 */
public class HelloWorld {
    public static void main(String[] args) {
//        加载驱动程序
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("驱动程序加载成功");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("驱动程序加载失败");
            return;
        }
        String url = "jdbc:mysql://localhost:3306/JAVA";
        String user = "root";
        String password = "199911";
        try (Connection conn = DriverManager.getConnection(url,user,password){
            System.out.println("数据库连接成功"+conn);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Connection对象代表的数据连接不能被JVM的垃圾收集器回收,在使用完连接后必须关闭 (调用close()方法),否则连接会保持一段比较长的时间,直到超时。这里是通过自动资源管理技术释放资源的。


上面代码虽然可以成功建立连接,但是有时控制台会有警告,这是由于现在的网络通信为了提高网络完全,都要求使用SSL (Secure Sockets Layer 安全套接层) 安全 协议。但是由于各种原因,很多服务器并未使用SSL安全协议,特别是对于学习和测试阶段可以不使 用SSL安全协议。为此,需要修改url连接字符串:

"jdbc:mysql://localhost:3306/MyDB?verifyServerCertificate=false&useSSL=false"

verifyServerCertificate设置为false表示不进行安全认证,useSSL设置为false表示不使用SSL进行网 络通信。

有的url字符串会很长维护起来不方便,可以把这些参数对放置到Properties对象中,示例代码如 下(第二种写法):

mport java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/2/29
 * @time : 4:21 下午
 */
public class HelloWorld {
    public static void main(String[] args) {
//        加载驱动程序
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("驱动程序加载成功");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("驱动程序加载失败");
            return;
        }
        String url = "jdbc:mysql://localhost:3306/JAVA";
//        第二种写法
//        创建Properties对象
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("password","199911");
        info.setProperty("verifyServerCertificate","false");
        info.setProperty("useSSL","false");
        try (Connection conn = DriverManager.getConnection(url,info)){
            System.out.println("数据库连接成功"+conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

上述代码代码通过创建Properties对象,调用setProperty()方法,法键和值都是 字符串类型。解决了数据连接的url字符串有很多参数对的问题,和有的url字符串会很长维护起来不方便的问题。

但是上述代码还是有不足的地方,就是这些参数都是“硬编码 ”。在程序代码中的,程序编译之后不能修改。但是数据库用户名、密码、服务器主机名、端口等等这一切,在开发阶段和部署阶段可能完全不同,这些参数信息应该可以配置的,可以放到一个属性文件中,借助于输入流,可以在运行时读 取属性文件内容到Properties对象中。


如何创建配置文件:config.properties:

在src文件夹下创建文件。2.png

在config.properties文件中写下内容如下:

user=root
password=199911
useSSL=false
verifyServerCertificate=false


示例代码如下(第三种写法):

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/2/29
 * @time : 4:21 下午
 */
public class HelloWorld {
    public static void main(String[] args) {
//        加载驱动程序
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("驱动程序加载成功");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("驱动程序加载失败");
            return;
        }
        String url = "jdbc:mysql://localhost:3306/JAVA";
//        第三种写法
        Properties info = new Properties();
        try {
//            获得config.properties配置文件的输入流对象,需要自己创建在src文件里
            InputStream inputStream = HelloWorld.class.getClassLoader().getResourceAsStream("config.properties");
//            从流中加载信息到properties对象中
            info.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        try (Connection conn = DriverManager.getConnection(url,info)){
            System.out.println("数据库连接成功"+conn);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

注意:属性 文件一般放到src目录与源代码文件放置在一起,但是编译时,这些文件会复制到字节码文件所在的目录中,这种目录称为资源目录,获得资源目录要通过Java反射机制,

格式如下:

类名.class.getClassLoader().getResourceAsStream("config.properties")

语句能够获得运 行时config.properties的文件输入流对象。

在开发和部署阶段使用文本编辑器修改该文件,不需要修改程序代码。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
14天前
|
监控 关系型数据库 MySQL
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
54 3
|
14天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
29 1
|
17天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
30 4
|
23天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
120 1
|
25天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
77 2
|
11天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
108 0
|
24天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
53 0
|
1月前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
182 1
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
87 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
40 0

热门文章

最新文章

下一篇
无影云桌面