数据库技术四:JDBC,预处理对象,JDBC事务控制

本文详细介绍了JDBC的概念、原理,并通过实例讲解了如何使用JDBC进行增删改查操作。同时,针对SQL注入问题,文章讨论了PreparedStatement接口的重要性和与Statement的区别,以及JDBC如何进行事务控制,确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. JDBC概述

1.1 什么是JDBC

1.2 JDBC原理

2. JDBC开发

3. JDBC实现增删改查

3.1 JDBC工具类

4. SQL注入问题

4.1 什么是SQL注入?

4.2 如何解决SQL 注入?

5. 预处理对象

5.1 PreparedStatement 接口

 5.2 Statement 与 PreparedStatement的区别?

6. JDBC 控制事务


1. JDBC概述

1.1 什么是JDBC

JDBC (Java Data Base Connectivity) 是 Java 访问数据库的标准规范。是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。是 Java 访问数据库的标准规范。

1.2 JDBC原理

JDBC 是接口,驱动是接口的实现,没有驱动将无法完成数据库连接,从而不能操作数据库。每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生产厂商提供。

JDBC 就是由 sun 公司定义的一套操作所有关系型数据库的规则(接口),而数据库厂商需要实现这套接口,提供数据库驱动 jar 包,我们可以使用这套接口编程,真正执行的代码是对应驱动包中的实现类。


2. JDBC开发

  • 数据准备

在 MySQL 中准备好以下数据


-- 创建 jdbc_user表
CREATE TABLE jdbc_user (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(50),
  PASSWORD VARCHAR(50),
  birthday DATE
);
 
-- 添加数据
INSERT INTO jdbc_user (username, PASSWORD,birthday) 
VALUES
('admin1', '123','1991/12/24'), 
('admin2','123','1995/12/24'),
('test1', '123','1998/12/24'), 
('test2', '123','2000/12/24');
  • MySql驱动包

首先将 MySQL 驱动包添加到 jar 包库文件夹 myJar 中,它用于存放当前项目需要的所有 jar 包。然后在 IDEA 的项目中配置 jar 包库的位置。最后创建一个新的模块 jdbc_task01 并添加 jar 包库的依赖。

步骤分析:
1 . 获取驱动 (可以省略)
2 . 获取连接
3 . 获取 Statement 对象
4 . 处理结果集 (只在查询时处理)
5 . 释放资源

1. 注册驱动


 JDBC规范定义驱动接口: java.sql.Driver
  MySql驱动包提供了实现类: com.mysql.jdbc.Driver

从 JDBC 3 开始,目前已经普遍使用的版本,可以不用注册驱动而直接使用。

使用反射方法 Class.forName 加载 Driver 类的时候会自动执行 Driver 类的静态代码块里面的注册驱动的代码。

public class JDBCDemo01 {
    public static void main(String[] args) throws ClassNotFoundException {
        // 注册驱动 forName 方法执行将类进行初始化
        Class.forName("com.mysql.jdbc.Driver");
    }
}

2. 获得连接
解决插入中文乱码问题:characterEncoding=UTF-8 指定字符的编码、解码格式。

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

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

        // 获取连接 url, 用户名, 密码
        String url = "jdbc:mysql://localhost:3306/db4?characterEncoding=UTF-8";
        Connection con = DriverManager.getConnection(url, "root", "123456");
    }
}

 3. 获取语句执行平台


  Statement createStatement(); -- 创建 SQL 语句执行对象。
  int executeUpdate(String sql); -- 执行增删改语句,返回 int 类型,代表受影响的行数。

public class JDBCDemo03 {
    public static void main(String[] args) throws Exception {
        // 注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        // 获取连接 url,用户名, 密码
        String url = "jdbc:mysql://localhost:3306/db4";
        Connection con = DriverManager.getConnection(url, "root", "123456");

        // 获取 Statement 对象
        Statement statement = con.createStatement();

        // 执行创建表操作
        String sql = "create table test01(id int, name varchar(20), age int);";

        // 增删改操作
        int i = statement.executeUpdate(sql);

        // 返回值是受影响的函数
        System.out.println(i);

        // 关闭流
        statement.close();
        con.close();
    }
}

4. 处理结果集


ResultSet executeQuery(String sql); -- 执行查询语句,返回 ResultSet 结果集对象。

只有在进行查询操作的时候,才会处理结果集。

ResultSet 接口作用:封装数据库查询的结果集,对结果集进行遍历,取出每一条记录。

public class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值