JDBC简单复习

JDBC

1.步骤说明

配置与数据库连接时的基本信息(url、username、password) --> 加载驱动(Driver) --> 连接数据库(通过connection与数据库进行连接) --> 通过connection创建statement对象(通过该对象对数据库进行操作:执行sql、获取数据等) --> 关闭连接,后创建的先关闭

2.代码举例

package com.Gw;

import java.sql.*;

public class jdbc {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.配置信息

        String url = "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8";
        String username = "root";
        String password = "123456";

        //2.加载驱动
        Class.forName("com.mysql.jdbc.Driver");

        //3.连接数据库,connection代表数据库
        Connection connection = DriverManager.getConnection(url, username, password);

        //4.向数据库发送SQL的对象Statement
        Statement statement = connection.createStatement();

        //5.编写sql
        String sql = "select * from users";

        //6.执行查询sql
        ResultSet rs = statement.executeQuery(sql);
        while(rs.next()){
            System.out.println("id = " + rs.getObject("id"));
            System.out.println("username = " + rs.getObject("username"));
            System.out.println("email = " + rs.getObject("email"));
        }

        //7.关闭链接,释放资源,一定要关闭,先创建的后关闭
        rs.close();
        statement.close();
        connection.close();
    }

}

事务

要么都成功,要么都失败!

1.ACID原则(数据库事务正常执行的四个原则)

  • 原子性(Atomicity):是指一个事务要么全部执行,要么不执行,也就是说一个事务不可能只执行了一半就停止了。比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱。不可能划了卡,而钱却没出来。这两步必须同时完成,要么就不完成。
  • 一致性(Consistency):是指事务的运行并不改变数据库中数据的一致性。例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变。
  • 独立性(Isolation):事务的独立性也称作隔离性,是指两个以上的事务不会出现交错执行的状态。因为这样可能会导致数据不一致,更加具体的来讲,就是事务之间的操作是独立的。
  • 持久性(Durability):事务的持久性是指事务执行成功以后,该事务对数据库所作的更改便是持久的保存在数据库之中,不会无缘无故的回滚

开启事务 start transaction (开启事务的前提是设置setAutoCommit(false),即开启自定义提交/回滚)

事务提交(将本次修改提交,保存修改) commit()

事务回滚(即本次修改不使原数据发生改变) rollback()

事务关闭

junit单元测试

<dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.12</version>
     <scope>test</scope>
</dependency>

使用在需要执行的方法前加上注解@Test,则该方法变为可执行方法

如果在运行发生错误的情况下不进行回滚,数据库中的数据会随着程序的运行而更新,回滚则提供了在程序出错的情况下保持原数据不变

2.代码举例

package com.Gw;

import org.junit.jupiter.api.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

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

        Connection connection = null;
        //2.加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");

            //3.连接数据库
            connection = DriverManager.getConnection(url, username, password);

            //4.通知数据库开启事务
            connection.setAutoCommit(false);

            String sql = "update account set money = money - 100 where name = 'zhangsan';";
            connection.prepareStatement(sql).executeUpdate();

            //如果此时出现了错误
            int i = 1 / 0;

            String sql1 = "update account set money = money + 100 where name = 'lisi';";
            connection.prepareStatement(sql1).executeUpdate();

            //如果两条sql语句都执行成功了,则进行提交,否则进行回滚
            connection.commit();
            System.out.println("Success!!!");
        } catch (Exception e) {
            try {
                connection.rollback();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            e.printStackTrace();
        }finally {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

posted @ 2022-03-28 22:03  CDUT的一只小菜鸡  阅读(29)  评论(0编辑  收藏  举报