参考

什么是JDBC?

JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。

使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。

  • JDBC接口 JDBC接口是Java标准库自带的
  • JDBC驱动 需要自己下载,可以maven下载,也可以导入jar包

使用JDBC的好处是:

  • 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发;
  • Java程序编译期仅依赖java.sql包,不依赖具体数据库的jar包;
  • 可随时替换底层数据库,访问数据库的Java代码基本不变。

建立一个简单的连接

  • 需要先连接数据库
  • 在数据库中添加对应的数据
import java.sql.*;

public class Main {
public static void main(String[] args) {
//1. 通过DriverManager来获得数据库连接
try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mylearn","root","root");
//2. 创建一个用于执行SQL的Statement对象
Statement statement = connection.createStatement()){
//注意前两步都放在try()中,因为在最后需要释放资源!
//3. 执行SQL语句,并得到结果集
ResultSet set = statement.executeQuery("select * from student");
//4. 查看结果
while (set.next()){
System.out.println(set.getString(1)); //读取数据库表mylearn数据库student表的第一列
}
}catch (SQLException e){
e.printStackTrace();
}
//5. 释放资源,try-with-resource语法会自动帮助我们close
}
}

三个基本对象

  • DriverManager 管理数据库驱动
    • 通过调用getConnection()来进行数据库的链接
  • connection 数据库的连接对象
    • 通过连接对象来创建一个Statement用于执行SQL语句
  • Statement 用来执行SQL语句
    • 查询到的数据就放在ResultSet对象
    • 可以使用executeUpdate()方法来执行一个DML或是DDL语句,它会返回一个int类型,表示执行后受影响的行数,可以通过它来判断DML语句是否执行成功。
    • 通过excute()来执行任意的SQL语句,它会返回一个boolean来表示执行结果是一个ResultSet还是一个int,我们可以通过使用getResultSet()或是getUpdateCount()来获取。

简单的数据库操作

DML操作

student表如下

ID Name Age Score
201721 小明 18 100
201722 小红 20 99
201723 小刚 16 60
201724 小白 24 70
import java.sql.*;

public class Main {
public static void main(String[] args) {
try(
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mylearn","root","root");
Statement statement = connection.createStatement()){

int i = statement.executeUpdate("insert into student values(201725,'小亚',21,78),(201726,'小兵',18,100)");
System.out.println("生效了"+ i + "行");
} catch (SQLException e){
e.printStackTrace(); //打印异常信息
}
}
}

更新后的表格为:

ID Name Age Score
201721 小明 18 100
201722 小红 20 99
201723 小刚 16 60
201724 小白 24 70
201725 小亚 21 78
201726 小兵 18 100

DQL操作

通过如下的方法,我们可以打印数据库中的内容

import java.sql.*;

public class Main {
public static void main(String[] args) {
try(
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mylearn","root","root");
Statement statement = connection.createStatement()){

ResultSet set = statement.executeQuery("select * FROM student");
while (set.next()){ //这里类似迭代器,set理解为一个指针
System.out.println(set.getInt(1)); // 注意set.get方法不同
System.out.println(set.getString(2));
System.out.println(set.getInt(3));
System.out.println(set.getInt(4));
}
} catch (SQLException e){
e.printStackTrace(); //打印异常信息
}
}
}

批处理操作

当我们要执行很多条语句时,可以不用一次一次地提交,而是一口气全部交给数据库处理,这样会节省很多的时间。

public static void main(String[] args) throws ClassNotFoundException {
try (Connection connection = DriverManager.getConnection();
Statement statement = connection.createStatement()){

statement.addBatch("insert into user values ('f', 1234)");
statement.addBatch("insert into user values ('e', 1234)"); //添加每一条批处理语句
statement.executeBatch(); //一起执行

}catch (SQLException e){
e.printStackTrace();
}
}

将查询结果映射为对象