前言

大概了解了什么是JDBC后,接下来再具体了解一下几个常用API功能.后面就可以使用这些API执行SQL语句

mysql驱动包

JDBC-idea导入mysql连接java的jar包

按照上面文章的步骤操作完成后,比较"硬核"的准备工作就OK了,接下来就来了解一下常用的API

API使用

注册驱动/获得连接

JDBC-java连接mysql(基于mysql8.0)

注册驱动

注册驱动语句可省略
  • JDBC规范定义了驱动接口: java.sql.Driver
  • mysql8以前, mysql驱动包提供了实现类com.mysql.jdbc.Driver
  • mysql8+, mysql驱动包的实现类改为com.mysql.cj.jdbc.Driver
加载注册驱动的方式描述
Class.forName(数据库驱动实现类)加载和注册数据库驱动
// 代码示例
public class JDBCTest01(){

    public static void main(String[] args){
            
            // 注册驱动(基于mysql8.0)(可省略)
            Class.forName("com.mysql.jdbc.Driver");
    }
}

获得连接

  • Connection接口代码一个连接对象.具体的实现类由数据库的厂商实现
  • 使用DriverManager类的静态方式getConnection可以获得数据库的连接
获得连接的静态方法说明
Connection getConnection(String url, String user, String password)通过连接字符串, 用户名, 密码 来获取数据库连接对象
  • String url: mysql URL的格式jdbc:mysql://localhost:3306/数据库名称?其余参数
  • String user: 登录数据库的用户名(一般是root)
  • String password: 登录数据库的密码

[注]
参考Java MySQL连接 | 菜鸟编程
image.png

// 代码示例
public class SqlConnection {

    public static void main(String[] args) throws Exception{

        // 1.注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        // 2.获取连接 url, 用户名, 密码
        //"jdbc:mysql://localhost:3306/grasg?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
        String DATABASE = "grasg";
        String USER = "root";
        String PASSWORD = "316426";
        String url = "jdbc:mysql://localhost:3306/" + DATABASE + "?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
        Connection con = DriverManager.getConnection(url,USER,PASSWORD);

        System.out.println(con);
    }
}

// 运行结果: com.mysql.cj.jdbc.ConnectionImpl@3c947bc5

获取语句执行平台

  • 通过ConnectioncreateStatement方法,获取sql语句执行对象.(语句执行对象可以理解为"有权利执行sql的对象")

    Connection接口中的方法说明
    Statement createStatement()创建SQL语句执行对象
  • Statement: 代表一条语句对象,用于发送SQL语句给服务器,然后执行静态SQL语句并返回它所生成的结果

    Statement类 常用方法说明
    int executeUpdate(String sql)执行insert,update,delete语句.返回int类型,代表受影响的行数
    ResultSet executeQuery(String sql)执行select语句,返回ResultSet结果集对象
// 代码示例
public class SqlCreateTable {

    public static void main(String[] args) throws Exception{

        // 1. 注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2. 获取连接
        String USER = "root";
        String PASSWORD = "316426";
        String DATABASE = "lianxi01";
        String URL = "jdbc:mysql://localhost:3306/" + DATABASE + "?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
        Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
        // 3. 获取语句执行平台
        // 通过Connection的createStatement方法获取sql语句执行对象
        Statement sqlState = conn.createStatement();
        // 4. 创建表
        String sql = "CREATE TABLE test_01(id int, name varchar(20),age int);";
        int i = sqlState.executeUpdate(sql);
        System.out.println("获影响的行数为 = " + i);
        System.out.println("SQL语句执行成功!");
        // 5.关闭流(后创建的先关闭)
        sqlState.close();
        conn.close();
    }
}

处理结果集(ResultSet接口)

只有在进行select查询操作时,才需要处理结果集
ResultSet接口方法说明
boolean next()游标向下一行; 返回boolean类型,如果还有下一条记录,返回true,否则返回false
xxx getXxx(String or int)参数是String类型:表示通过<列名/字段名>获取数据; 参数是int类型:表示通过<列号/第几列>获取数据,从1开始
// 代码示例
public class SqlSelect {

    public static void main(String[] args){
        Connection conn = null;
        Statement sqlExecute = null;
        ResultSet resultSet = null;

        try {
            // 1.注册驱动 - 可以省略
            //Class.forName("com.mysql.cj.jdbc.Driver");
            // 2.连接数据库并获取连接
            String USER = "root";
            String PASSWORD = "316426";
            String DATABASE = "lianxi01";
            String URL = "jdbc:mysql://localhost:3306/" + DATABASE + "?characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
            conn = DriverManager.getConnection(URL,USER,PASSWORD);
            // 3.获取语句执行平台(Statement对象)
            sqlExecute = conn.createStatement();
            // 4.执行select语句,返回的是一个ResultSet对象
            String sql = "select * from test_01;";
            resultSet = sqlExecute.executeQuery(sql);
            // 5.处理结果集
        /*System.out.println(resultSet.next());
        int id = resultSet.getInt("id");
        System.out.println("id = " + id);
        String name = resultSet.getString("name");
        System.out.println("name = " + name);
        int age = resultSet.getInt("age");
        System.out.println("age = " + age);*/
            int id;
            String name;
            int age;
            while(resultSet.next()){
                id = resultSet.getInt("id");
                name = resultSet.getString("name");
                age = resultSet.getInt("age");
                System.out.println("id = " + id + ", name = " + name + ", age = " + age);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            // 6.关闭流对象
            try {
                resultSet.close();
                sqlExecute.close();
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        System.out.println("一切都关了!");
    }
}

释放资源

  • 需要释放的对象: ResultSet结果集(只有在执行select查询操作时才出现结果集,才需要关闭), Statement对象, Connection对象
  • 释放原则: 先创建的后关,后创建的先关. Result => Statement => Connection
  • 放在final块中

image.png

步骤总结

  • 获取驱动
  • 获取连接
  • 获取语句执行平台,即Statement对象
  • 处理结果集(只在查询时处理)
  • 关闭对象,释放资源

chain_xx_wdm
64 声望2 粉丝

1.领养代替买卖


« 上一篇
JDBC-概述