JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。
使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。
例如,我们在Java代码中如果要访问MySQL,那么必须编写代码操作JDBC接口。注意到JDBC接口是Java标准库自带的,所以可以直接编译。而具体的JDBC驱动是由数据库厂商提供的,例如,MySQL的JDBC驱动由Oracle提供。因此,访问某个具体的数据库,我们只需要引入该厂商提供的JDBC驱动,就可以通过JDBC接口来访问,这样保证了Java程序编写的是一套数据库访问代码,却可以访问各种不同的数据库,因为他们都提供了标准的JDBC驱动:
使用JDBC的好处是:
下载官网最新版本即可
开始导包:
或者更简单的,您可以使用Maven:
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.30version>
dependency>
使用JDBC时,我们先了解什么是Connection。Connection代表一个JDBC连接,它相当于Java程序到数据库的连接(通常是TCP连接)。打开一个Connection时,需要准备URL、用户名和口令,才能成功连接到数据库。
注册驱动:
import com.mysql.cj.jdbc.Driver;
// 1.注册驱动
Driver driver = new Driver();
得到与数据库jdbc_test链接:
// 2.得到与数据库jdbc_test链接
// 底层就是socket连接
String url = "jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&serverTimezone=GMT%2B8";
Properties properties = new Properties();
properties.setProperty("user","root"); // 用户名
properties.setProperty("password","root"); // 密码
执行SQL语句:
// 3.执行SQL
String sql = "insert into user values(1,'dahezhiquan','111','中国大学')";
Statement statement = connect.createStatement();
int rows = statement.executeUpdate(sql);
System.out.println(rows > 0 ? "成功":"失败");
关闭连接:
// 4.关闭链接
statement.close();
connect.close();
第一种方式:上文使用driver
注册驱动创建的方式
第二种方式:使用反射获取
/**
* 使用反射加载driver类
*/
@Test
public void test1() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) aClass.newInstance();
String url = "jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&serverTimezone=GMT%2B8";
Properties properties = new Properties();
properties.setProperty("user","root"); // 用户名
properties.setProperty("password","root"); // 密码
Connection connect = driver.connect(url, properties);
}
第三种方式:使用DriverManager
进行统一管理
/**
* 使用DriverManager进行统一管理
*/
@Test
public void test2() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) aClass.newInstance();
String url = "jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&serverTimezone=GMT%2B8";
String username = "root";
String password = "root";
// 注册Driver驱动
DriverManager.registerDriver(driver);
Connection connection = DriverManager.getConnection(url, username, password);
}
第四种方式:使用Class.forName
自动完成注册驱动,进行简化
/**
* 简化DriverManager注册
* 使用Class.forName自动完成注册驱动,进行简化
*/
@Test
public void test3() throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException {
Class<?> aClass = Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&serverTimezone=GMT%2B8";
String username = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url, username, password);
}
第五种方式:使用properties
配置文件读取完成连接(最推荐使用🦣)
MySQL properties
文件示例:
user=root
password=root
url=jdbc:mysql://localhost:3306/jdbc_test?useSSL=false&serverTimezone=GMT%2B8
driver=com.mysql.cj.jdbc.Driver
进行数据库连接操作:
/**
* 使用properties配置文件读取完成连接
*/
@Test
public void test4() throws IOException, ClassNotFoundException, SQLException {
Properties properties = new Properties();
properties.load(new FileInputStream("src\\mysql.properties"));
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String url = properties.getProperty("url");
String driver = properties.getProperty("driver");
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
}
对于ResultSet接口,迭代器初始化时被设定在第一行之前的位置,必须调用next方法将它移动到第一行。另外,它没有hasNext方法,我们需要不断地调用next,直至该方法返回false
代码示例(演示一个查找数据的程序):
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
/**
* ResultSet示例
*/
public class ResultSetTest {
public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
Properties properties = new Properties();
properties.load(new FileInputStream("src\\mysql.properties"));
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String url = properties.getProperty("url");
String driver = properties.getProperty("driver");
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement();
String sql = "select id,username,password,school from user";
// 拿到结果集
ResultSet resultSet = statement.executeQuery(sql);
// 循环取出数据
while (resultSet.next()) {
int id = resultSet.getInt(1);
String username = resultSet.getString(2);
String userPassword = resultSet.getString(3);
String school = resultSet.getString(4);
System.out.println(id + "\t" + username + "\t" + userPassword +
"\t" + school);
}
// 关闭资源
resultSet.close();
statement.close();
connection.close();
}
}