JDBC-JDBC开发入门

前言

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

mysql驱动包

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

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

API使用

注册驱动/得到链接

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

注册驱动

注册驱动语句可省略
  • 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语句并返回它所生成的结果segmentfault

    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对象
  • 处理结果集(只在查询时处理)
  • 关闭对象,释放资源
相关文章
相关标签/搜索