先来个最简单的一步连接:
String url = "jdbc:mysql://localhost:3306/db_name?user=root&password=123456&serverTimeZone=UTC";
// 连接
Connection connection = DriverManager.getConnection(url);
JDBC(Java Database Connectivity)
各大数据库厂商均实现了Java中java.sql
和javax.sql
包中的接口,我们要使用Java语言连接数据库进行操作。首先就要下载对应厂商提供的jar包。
下面以MySQL数据库为例:
在maven repository下载对应jar包
mysql-connector
https://mvnrepository.com/artifact/com.mysql/mysql-connector-j/8.0.31
将下载的jar包导入项目。
为连接MySQL数据库我们需要加载其驱动(即创建Driver对象)
Driver是
java.sql
中的一个接口,我们下载的jar包中已将其实现为具体的类。
Driver driver = new com.mysql.cj.jdbc.Driver();
// 注:第一个Driver是java.sql下的接口,new后面的是全路径的Driver类。
// 旧版本的包中使用的是com.mysql.jdbc.Driver();而在新版本中更推荐使用以上代码中的。
创建完成driver对象后,调用其connect(url, info)方法即可成功连接到数据库,该方法返回一个connection对象,我们可以通过此对象完成对MySQL的任何操作。
connect(String url, Properties info)
该方法有两个参数,第一个url为数据库的网络协议,需要提前定义好。
eg:
String url = "jdbc:mysql://localhost:3306/db_name"
其中localhost:3306为IP和端口,若不写则默认为本地主机。db_name为要连接的数据库名(连接指定的一个数据库)。
第二个参数info是携带的参数,以properties对象的形式传递。
其中必备的参数为用户名和密码。(8.0后有的版本要求传时区)
eg:
Properties info = new Properties();
info.setProperty("user","root");
info.setProperty("password","123456");
// 可能会需要的时区:
// info.setProperty("serverTimeZone", "UTC");
调用connect:
Connection connection = driver.connect(url,info);
优化:
将配置信息(url,user,password,serverTimeZone)存入配置文件,在需要改动时即修改配置文件即可。
在第一步中,我们通过全路径创建了Driver对象,若我们想要连接别的数据库(如Oracle),则需要修改这段全路径的代码,这样具有较高耦合度的代码能够优化的更加通用。
优化如下:
使用反射技术创建driver对象,即可将com.mysql.cj.jdbc.Driver
写入配置文件,在需要修改时即修改配置文件即可。降低了代码的耦合度。
Driver driver = null;
Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
// 上一行代码中的参数应为配置文件中读取出的变量。
driver = (Driver) aClass.getConstructor().newInstance();
在mysql-connector
中,为我们提供了一个DriverManager
类,我们推荐使用此类来获取连接。(它的==getConnection()
==方法)。
在此类的源码中可以发现其已经自动帮我们创建了driver对象。故可以大大简化我们的代码量。
eg:
String url = "jdbc:mysql://localhost:3306/db_name?user=root&password=123456&serverTimeZone=UTC";
// 使用getConnection方法获取连接的connection对象。
Connection connection = DriverManager.getConnection(url);
// 注:用户名密码等参数放在url里了。当然,这些均可放在配置文件中。
getConnection的重载
Connection getConnection(String url,java.util.Properties info)
Connection getConnection(String url,
String user, String password)
Connection getConnection(String url)