JDBC简介及连接MySQL数据库Code
JDBC简介
JDBC
在Java中,数据库存取技术分类:
-
JDBC直接访问数据库
-
JDO技术
-
第三方O/R工具,如Hibernate, mybatis 等
JDBC是java访问数据库的基石,JDO, Hibernate等只是更好的封装了JDBC
JDBC基础
-
JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)使用这个类库可以以一种标准的方法、方便地访问数据库资源
-
JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。
-
JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
我们认为的连接应该是如此
但实际是这样
JDBC接口(API)包括两个层次:
面向应用的API
- Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。
面向数据库的API
- Java Driver API,供开发商开发数据库驱动程序用。
JDBC是sun公司提供一套用于数据库操作的接口,java程序员只需要面向这套接口编程即可。不同的数据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。
————面向接口编程
JDBC连接MySQL数据库的连接测试。
有五种方式,依次进行迭代。最终方式五(推荐使用)。主要是数据和代码解耦,并且在后期如果部署到服务器上后,我们只需要修改配置文件即可。不需要再全部重新打包。
我这边使用的是MySQL 8.0.21,所以所用的驱动是com.mysql.cj.jdbc.Driver,对于MySQL5的版本则还是原来的com.mysql.jdbc.Driver。并且高版本的MySQL需要设置时区,低版本的不需要没有太大影响。
URL:
jdbc:mysql://localhost:3306/test?serverTimezone=GMT
代码
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
import org.junit.Test;
import com.mysql.cj.jdbc.Driver;
public class ConnectionTest {
/**
* 方式一
*/
@Test
public void connectionTest1() throws Exception {
Driver driver = (Driver) new com.mysql.cj.jdbc.Driver();
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT";
//将用户和密码封装到Properties中
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "123456");
Connection connect = driver.connect(url, info);
System.out.println(connect);
}
/**
* 方式二:对方式一的迭代,在如下的程序中不会出现第三方的API,使得程序具有可移植性
*/
@Test
public void connectionTest2() 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/test?serverTimezone=GMT";
//3、提供连接需要的用户和密码
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "123456");
//4、获得连接
Connection connect = driver.connect(url, info);
System.out.println(connect);
}
/**
* 方式三:使用 DriverManager 替换 Driver
*/
@Test
public void connectionTest3() throws Exception {
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT";
String user = "root";
String password = "123456";
//注册驱动
DriverManager.registerDriver(driver);
//获取连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
/**
* 方式四:由于Driver在编译时就提供静态代码块实现了注册驱动
*/
@Test
public void connectionTest4() throws Exception {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT";
String user = "root";
String password = "123456";
/**
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
*/
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
/**
* 方式五:最终版。
* 好处:达到了数据与程序的解耦。利于后期的修改
*/
@Test
public void connectionTest5() throws Exception {
InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("db.properties");
Properties properties = new Properties();
properties.load(is);
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String classDriver = properties.getProperty("classDriver");
Class.forName(classDriver);
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
}
}
配置文件(db.properties)
url=jdbc:mysql://localhost:3306/test?serverTimezone=GMT
user=root
password=123456
classDriver=com.mysql.cj.jdbc.Driver
上一篇: 对numpy中的数组条件筛选功能详解