JDBC基础实现方法

一、 JDBC的概述

JDBC(Java DataBase Connection)即Java数据库连接技术,是指一整套用于执行SQL语句的Java API和技术,主要存放在java.sql包中,Java程序可通过这套API连接一个关系型数据库,并进行操作。

由于不同厂商的数据库产品的内部原理不同,如果直接用不同厂商提供的API操作数据库,Java程序的可移植性非常差。所以JDBC要求各个厂商统一按照Java提供的规范来设计数据库驱动,使它们都能够与Java提供的API兼容,使得代码通用性增强。

如图,JDBC是Java程序与数据库系统之间的缓冲层。


二、 JDBC的主要API

1. Driver接口

  • 实现数据库驱动程序的接口,又厂商负责实现并提供,开发者只需引入驱动不同数据库的jar包。

2. DriverManager类

  • 用于加载JDBC驱动程序,并建立与数据库的连接。

  • 有两个重要的静态方法:

    方法 功能
    void registerDriver (Driver driver) 用于加载数据库驱动程序。
    Connection getConnection(String url, String user, String password) 连接数据库并返回连接对象。

3. Connection接口

方法 功能
Statement createStatement () 获取一个陈述器对象
PreparedStatement prepareStatement (String sql) 获取一个SQL预编译的陈述器
CallableStatement prepareCall (String sql) 获取SQL操作的储存过程
DatabaseMetaData getMetaData() 获取数据库元数据的对象。

4. Statement接口

方法 功能
boolean execute (String sql) 可执行任何SQL语句,有结果集时为true,否则为false。
ResultSet executeQuery (String sql) 执行select语句,返回结果集
int executeUpdate (String sql) 执行insert、update、delete语句,返回受影响行数

5. ResultSet接口

  • 用于存放和解析结果集,对象初始化时游标在第一行,调用next()方法换行。

  • 数据获取方法

    方法 功能
    getXXX (int index) 以索引方式获取某字段的数据。
    getXXX (String field) 以字段名获取某字段的数据。
  • 游标操作方法

    方法 功能
    void next() 游标移动到下一行
    void previout () 游标移动到上一行
    void absolute (int row) 游标移动到指定行
    void afterLast () 游标移动到尾行之后
    void beforeFirst () 游标移动到首行之前
    void last () 游标移动到尾行

6. PreparedStatement接口

实际开发中往往需要将程序的变量作为SQL语句的参数,PreparedStatement是Statement的子接口,可预编译SQL语句,用占位符“?”代替参数进行预编译,之后在用 setXXX()方法给参数赋值。示例:

String sql = "insert into tab_user(id, name, birthday) value(?, ?, ?)";
PreparedStatement ps = connection.preparedStatement(sql);
ps.setInt(1, 101);            //第一个参数是字段索引,第二个是数据。
ps.setString(2, "King");
ps.setDate(3, "2020-1-1");
ps.executeUpdate();

具体方法列表请查看帮助文档。


三、实现JDBC的基本步骤

  1. 将数据库驱动的 jar包(mysql-connector-java.jar)放到 lib目录,并右键引用 jar包,确认MySQL服务正在运行。

  2. 加载并注册驱动,有两种方式:

    • Class.forName("com.mysql.jdbc.Driver");

      ​ 该方法作用是加载并初始化一个指定的类。

    • DriverManager.registerDriver(new com.mysql.jdbc.Driver() );

      ​ 由于Driver对象源码中默认存在一段静态代码自动执行Class.forName("driverName") ,所以此方法会使驱动重复注册。

  3. 连接数据库时,其中参数 URL="jdbc:mysql://hostName:port/databaseName?useUnicode=true&characterEncoding=utf-8&useSSL=true";

    • jdbc:mysql:// 是规定格式;
    • hostName:port 是主机地址和端口号;
    • databaseName 是MySQL服务中必须已经存在的一个数据库对象的名称。
    • ?后面用来设置一些参数,必须设置useSSL=true,否则会报警,原因是MySQL版本高于JDBC驱动版本时,需要指明是否进行SSL连接。
import java.sql.*;
public class DataBaseConn {
    public static void main(String[] args) {
        // 先声明JDBC的工具对象
        Connection connection;
        Statement statement;
        ResultSet resultSet;
        // 连接数据库所需的参数
        String url = "jdbc:mysql://localhost:3306/db_practice?useUnicode=true&characterEncoding=utf-8&useSSL=true";
        String user = "root";
        String password = "123456";
        
        try {
            // 1. 注册使用数据库的驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 2. 通过DriverManager获取数据库连接。
            connection = DriverManager.getConnection(url, user, password);
            // 3. 通过connection建立陈述器对象。
            statement = connection.createStatement();
            // 4. 通过statement对数据库陈述SQL,并返回结果集。
            resultSet = statement.executeQuery("select * from tab_student");
            // 5. 解析结果集。
            System.out.println("id | name | address | password");
            while (resultSet.next()) {
                int id = resultSet.getInt("Sno");
                String name = resultSet.getString("Sname");
                String address = resultSet.getString("address");
                String psw = resultSet.getString("password");
                System.out.printf("%d | %s | %s | %s \n", id, name, address, psw);
            }
            // 6. 使用后,释放资源。
            resultSet.close();
            statement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }
}
posted @ 2021-08-17 20:31  DvLopr_Jarjack  阅读(120)  评论(0)    收藏  举报