1.概述
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的好处是:
各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发;
Java程序编译期仅依赖java.sql包,不依赖具体数据库的jar包;
可随时替换底层数据库,访问数据库的Java代码基本不变。
2.JDBC快速入门
注册驱动,加载Driver类
获取链接,得到Connection
执行增删改查,发送SQL给Mysql执行
释放资源,关闭相关链接
JDBC驱动各版本下载 下载官网最新版本即可😊
开始导包:(重要!!!)
或者更简单的,您可以使用Maven:
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </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();
3.获取数据库连接的5种方式
第一种方式:上文使用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); }
4.ResultSet的基本使用
对于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(); } }