Skip to content

JDBC

概述

JDBC提供了访问特定数据库的接口和通讯标准,定义了一系列接口和类。

Driver

加载Driver驱动

新建java类,执行以下内容:

public class JDBC001 {
    public static void main(String[] args) throws ClassNotFoundException {
        Class.forName("com.mysql.cj.jdbc.Driver");
    }
}

DriverManager

使用DriverManager创建一个Connection对象,参数至少包括3个:

  • mysql url 格式:jdbc:mysql://[IP地址]:[端口]/[数据库名]?[参数]
  • mysql用户名
  • mysql密码
Connection coon = DriverManager.getConnection("");

Connection接口

上述代码返回一个Connection对象,代表与特定数据库建立了链接。

具有以下常用方法:

  • createStatement():创建用于静态SQL的Starement对象。
  • prepareStatement():接收一个String类型的数据库语句,创建用于执行预编译SQL的PrepareStatement对象。
  • setAutoCoomit():接收一个布尔值,开启/关闭自动提交事务(用于事务控制)。

Statement接口

用于执行静态 SQL 语句。

方法

  • executeQuery():查询数据表,接收一个String类型的查询语句,返回一个ResultSet对象。
  • executeUpdate():执行语句并返回受到影响的行数,接收一个String类型的sql语句,返回一个int,表示影响的行数。

ResultSet接口

ResultSet用于存储从数据库查询到的结果,并维护一个指向当前数据行的指针。初始化时,游标位于第一行前。

提供了以下常用方法:

  • next():将游标向下移动一行。如果新行有效,返回 true;如果已无数据,返回 false

  • getXxx():读取指定列,允许接收一个整型索引或字符串索引,返回指定列的值。

需要注意JDBC 中列索引从 1 开始,不是 0。

通常情况下,ResultSet的游标都是单向移动的,因此通常会在查询语句执行后就将返回的ResultSet 读取到一个List中存放。

PreparedStatement接口

用于安全地对数据库进行操作,使用 ? 作为占位符,将 SQL 结构与数据分离,避免SQL注入的风险。

通常不和Statement接口同时使用。

常用方法:

  • executeQuery():执行查询语句,返回一个ResultSet对象。
  • executeUpdate():执行语句并返回受到影响的行数,表示影响的行数。
  • execute():执行当前对象的数据库语句,返回一个布尔值。 返回值为true时,执行的语句是查询语句; 返回值为false时,执行的语句是操作语句。

  • getResultSet():获取查询语句的结果,但和executeQuery()的返回值指向同一个对象。

释放资源

JDBC 创建的对象通常不会被垃圾回收自动立即释放,必须显式关闭。

关闭顺序为后打开的先关闭 :ResultSet -> Statement -> Connection,通常按以下逻辑写:

if(rs!=null){
    rs.close();
}