博客
关于我
25-【JDBC】
阅读量:520 次
发布时间:2019-03-08

本文共 3424 字,大约阅读时间需要 11 分钟。

JDBC技术详解

JDBC概述

Java Database Connectivity (JDBC) 是 Java 编程语言用于访问 relational数据库的标准规范。通过 JDBC,Java 程序可以与数据库建立连接,并执行 CRUD 操作(Create, Read, Update, Delete)。JDBC 操作数据库的核心流程包括注册驱动、获取连接、执行 SQL 语句以及处理结果集。

JDBC 核心API

JDBC 的核心包括四个主要对象:

  • DriverManager

    用于注册数据库驱动。通过 Class.forName("com.mysql.jdbc.Driver") 加载驱动类。

  • Connection

    表示与数据库的连接。通过 DriverManager.getConnection(url, user, password) 获取连接。

  • Statement

    执行 SQL 语句的对象。通过 Connection.createStatement() 获取。

  • ResultSet

    用于存储查询结果的结果集。

  • 注册驱动

    数据库驱动由数据库厂商提供,JDBC 提供了两种注册驱动方式:

  • 静态方法注册

    • 优点:直接使用驱动类的静态注册方法。
    • 缺点:导致硬编码,无法灵活更换驱动。
    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
  • 动态加载

    • 优点:代码更灵活,省去硬编码。
    Class.forName("com.mysql.jdbc.Driver");
  • 获取数据库连接

    数据库连接 URL 格式为:

    jdbc:mysql://localhost:3306/数据库名

    常见情况:

    • 本地开发:jdbc:mysql:///day24
    • 云开发:jdbc:mysql://myinstance.cloud.databank.com/day24

    步骤:

    Connection conn = DriverManager.getConnection(    "jdbc:mysql://localhost:3306/day24",    "root",    "root");

    JDBC 增删改查

    数据库操作流程

  • 注册驱动
  • 获取连接
  • 获取 Statement 对象
  • 执行 SQL 语句
  • 处理 ResultSet
  • 释放资源
  • 操作类型对应的 Statement 方法:

    • execute(String sql): 用于查询(返回 ResultSet)。
    • executeUpdate(String sql): 用于增删改(返回空 ResultSet)。

    数据增

    Statement stmt = conn.createStatement();stmt.executeUpdate("INSERT INTO category VALUES('手机')");

    数据删

    stmt.executeUpdate("DELETE FROM category WHERE id=1");

    数据改

    stmt.executeUpdate("UPDATE category SET name='汽车' WHERE id=4");

    数据查询

    ResultSet rs = stmt.executeQuery("SELECT * FROM category");while (rs.next()) {    int id = rs.getInt("id");    String name = rs.getString("name");    System.out.println("ID: " + id + ", Name: " + name);}

    注意事项:

    • ResultSet 指针初始位置在第一行之前。
    • 使用 rs.next() 获取行数据前,确保指针已经移动到正确的线性位置。

    JDBC 事务管理

    开启事务

    Connection conn = DriverManager.getConnection(url, user, password);conn.setAutoCommit(false);

    提交事务

    conn.commit();

    回滚事务

    conn.rollback();

    JDBC 工具类优化

    public class JDBCUtils {    private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";    private static final String URL = "jdbc:mysql:///day24";    private static final String USER = "root";    private static final String PASSWORD = "root";    static {        try {            Class.forName(DRIVER_CLASS);        } catch (ClassNotFoundException e) {            // Driver 类会主动注册        }    }    public static Connection getConnection() throws SQLException {        return DriverManager.getConnection(URL, USER, PASSWORD);    }    public static void close(AutoCloseable... resources) {        for (AutoCloseable resource : resources) {            try {                resource.close();            } catch (SQLException e) {                e.printStackTrace();            }        }    }}

    登录案例

    用户输入账号和密码,通过 JDBC 查询数据库验证。

    public class LoginDemo {    public static void main(String[] args) throws SQLException {        Scanner scanner = new Scanner(System.in);        System.out.println("username: ");        String username = scanner.nextLine();        System.out.println("password: ");        String password = scanner.nextLine();        Connection conn = JDBCUtils.getConnection();        Statement stmt = conn.createStatement();        ResultSet rs = stmt.executeQuery(            String.format(                "SELECT * FROM user WHERE username='%s' AND password='%s';",                username,                password            )        );        if (rs.next()) {            System.out.println("欢迎 " + username + " 登录!");        } else {            System.out.println("账号或密码错误,登录失败。");        }        JDBCUtils.close(conn, stmt, rs);    }}

    转载地址:http://iyuiz.baihongyu.com/

    你可能感兴趣的文章
    串行通信原理及实验仿真
    查看>>
    豪威科技2021数字电路设计笔试
    查看>>
    复位策略
    查看>>
    [Telerik]RadDocking第05篇 在同一个RadSplitContainer中定义多个面板分组
    查看>>
    ERP项目成功的关键因素:团队建设
    查看>>
    用 shell 脚本制造连接频繁中断的场景
    查看>>
    BackgroundWorker 组件
    查看>>
    LINQ之日期函数
    查看>>
    领域实体
    查看>>
    slf4j日志
    查看>>
    覆盖关系
    查看>>
    策略模式
    查看>>
    c# datagirdview报dataerror请处理等等
    查看>>
    ubuntu20.04 编译vlc-android
    查看>>
    VLC/VLC-Android 编译系统说明
    查看>>
    Swagger2 设置全局token
    查看>>
    Spring Cloud Gateway 过滤器中直接返回错误结果信息
    查看>>
    idea Error:java: 错误: 不支持发行版本 5
    查看>>
    java.io.IOException:Stream closed
    查看>>
    zookeeper入门
    查看>>