JDBC基本操作CURD + 事务,规范步骤总结+实例测试

16 篇文章 0 订阅

前言:自从大一做了一个图书馆信息管理系统后,就一直没再用JDBC,但JDBC之上的封装库用了不少,然而今天还是想去回顾一下原始的JDBC,于是有了此文。此文学习自B站UP:遇见狂神说的教程。

一、环境配置

IDEA + MySQL


pom.xml添加依赖

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.22</version>
    </dependency>
</dependencies>

导入数据库,可方便编写SQL语句,IDEA的提示功能很好用。
(不导数据库也可以连接,因为只要开了MySQL的端口,如3306,便可以实现与数据库进程的通信)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、【JDBC-CURD】编码规范步骤总结

1.数据准备

数据准备
(注:->忽略即可,自定义字段与MySQL中关键字重复的话,可用``包围)

mysql> CREATE TABLE users(
    -> id INT PRIMARY KEY AUTO_INCREMENT,
    -> `name` VARCHAR(40),
    -> `password` VARCHAR(40),
    -> email VARCHAR(60),
    -> birthday DATE);

INSERT INTO users(`name`, `password`, email, birthday)
    -> VALUES('张三', '123456', 'zs@qq.com', '2000-01-01');
INSERT INTO users(`name`, `password`, email, birthday)
-> VALUES('李四', '123456', 'ls@qq.com', '2000-01-01');
INSERT INTO users(`name`, `password`, email, birthday)
-> VALUES('王五', '123456', 'ww@qq.com', '2000-01-01');

在这里插入图片描述


2.步骤总结

0.配置信息

1.加载驱动

2.创建连接数据库的的对象,Connection的对象代表数据库

3.创建向数据库发送SQL的对象,Statement / PreparedStatement : CRUD

(注:如果是预编译,则3、4步骤对换顺序)

4.编写SQL

5.执行SQL,得到 ResultSet : 结果集

6.对结果集对象rs进行操作

7.关闭连接,释放资源(先开的后关)


3.实例

实例1

代码
public class TestJdbc {
    public static void main(String[] args) {
        //0.配置信息
        String url = "jdbc:mysql://localhost:3306/kuang?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "";

        //1.加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        //2.创建连接数据库的的对象,Connection的对象代表数据库
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(url, username, password);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        //3.创建向数据库发送SQL的对象,Statement : CRUD
        Statement statement = null;
        try {
            statement = connection.createStatement();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        //4.编写SQL
        String sql = "SELECT * FROM users;";

        //5.执行SQL,得到 ResultSet : 结果集
        ResultSet rs = null;
        try {
            rs = statement.executeQuery(sql);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        //6.对结果集对象rs进行操作
        while (true) {
            try {
                if (!rs.next()) {
                    break;
                } else {
                    System.out.println("id = " + rs.getObject("id"));
                    System.out.println("name = " + rs.getObject("name"));
                    System.out.println("password = " + rs.getObject("password"));
                    System.out.println("email " + rs.getObject("email"));
                    System.out.println("birthday = " + rs.getObject("birthday"));
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        //7.关闭连接,释放资源(先开的后关)
        try {
            rs.close();
            statement.close();
            connection.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}
效果展示

在这里插入图片描述

实例2(预编译)

代码
public class TestJdbc2 {
    public static void main(String[] args) {
        //0.配置信息
        String url = "jdbc:mysql://localhost:3306/kuang?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "";

        //1.加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        //2.连接数据库,connection代表数据库
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(url, username, password);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        //3.编写SQL
        String sql_insert = "INSERT INTO users(name, password, email, birthday) VALUES (?, ?, ?, ?);";

        //4.预编译 PreparedStatement : CRUD
        PreparedStatement preparedStatement = null;
        try {
            preparedStatement = connection.prepareStatement(sql_insert);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        try {
            preparedStatement.setString(1, "zlc");//第i个占位符,赋值为key
            preparedStatement.setString(2, "123456");
            preparedStatement.setString(3, "99@qq.com");
            preparedStatement.setDate(4, new Date(System.currentTimeMillis()));
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        //5.执行SQL
        int i = 0;
        try {
            i = preparedStatement.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        if (i > 0) {
            System.out.println("插入成功~");
        }

        //7.关闭连接,释放资源(先开的后关)
        try {
            preparedStatement.close();
            connection.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}
效果展示

在这里插入图片描述

在这里插入图片描述
(注:CURD四个操作仅稍有差异,不再赘述C与D)

三、【事务】编码规范步骤总结

1.数据准备

CREATE TABLE account (
    -> id INT PRIMARY KEY AUTO_INCREMENT,
    -> `name` VARCHAR(40),
    -> money FLOAT);

INSERT INTO account (`name`, money) VALUES ('A', 1000);
INSERT INTO account (`name`, money) VALUES ('B', 1000);
INSERT INTO account (`name`, money) VALUES ('C', 1000);

在这里插入图片描述

2.步骤总结


0.配置信息

1.加载驱动

2.创建连接数据库的的对象,Connection的对象代表数据库

3.事务操作

  • 3.1 开启事务:通知数据库开启事务
  • 3.2 事务提交 / 事务回滚

4.关闭,释放资源(先开的后关)


开启事务
在这里插入图片描述

事务提交 commit()
在这里插入图片描述

事务回滚 rollback()
在这里插入图片描述
在这里插入图片描述

3.实例

代码

public class TestJdbc3 {

    @Test
    public void test() {
        //0.配置信息
        String url = "jdbc:mysql://localhost:3306/kuang?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "";

        //1.加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        //2.连接数据库,connection代表数据库
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(url, username, password);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        //3.1 开启事务:通知数据库开启事务,false是开启
        //等价于SQL中的 START TRANSACTION;
        try {
            connection.setAutoCommit(false);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        PreparedStatement preparedStatement1 = null;
        PreparedStatement preparedStatement2 = null;
        try {
            String sql1 = "UPDATE account SET money = money - 100 WHERE name = 'A';";
            preparedStatement1 = connection.prepareStatement(sql1);
            preparedStatement1.executeUpdate();

            //制造错误
            int i = 1 / 0;

            String sql2 = "UPDATE account SET money = money + 100 WHERE name = 'B';";
            preparedStatement2 = connection.prepareStatement(sql2);
            preparedStatement2.executeUpdate();

            //3.2 事务提交:以上两条sql都执行成功了,则提交事务
            connection.commit();
        } catch (SQLException throwables) {
            //3.3 事务回滚
            try {
                connection.rollback();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        //7.关闭,释放资源(先开的后关)
        try {
            preparedStatement1.close();
            preparedStatement2.close();
            connection.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

效果展示

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超周到的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值