美文网首页Ping说JavaWebJava
JavaWeb之JDBC(复习)

JavaWeb之JDBC(复习)

作者: Ping开源 | 来源:发表于2021-02-26 00:03 被阅读0次

    十二、JDBC(复习)

    目录:JDBC、事务

    1.JDBC

    什么是JDBC:Java连接数据库。

    JDBC原理
    需要jar包的支持
    ①java.sql
    ②javax.sql
    ③mysql-connector-java…连接驱动(必须要导入)
    创建测试数据库中的users表,可下载使用:https://share.weiyun.com/CT4MEnQJ,也可以直接复制下方。
    CREATE TABLE users(
        id INT PRIMARY KEY,
        `name` VARCHAR(40),
        `password` VARCHAR(40),
        email VARCHAR(60),
        birthday DATE
    );
    
    INSERT INTO users(id,`name`,`password`,email,birthday)
    VALUES(1,'张三','123456','zs@qq.com','2000-01-01');
    INSERT INTO users(id,`name`,`password`,email,birthday)
    VALUES(2,'李四','123456','ls@qq.com','2000-01-01');
    INSERT INTO users(id,`name`,`password`,email,birthday)
    VALUES(3,'王五','123456','ww@qq.com','2000-01-01');
    

    导入数据库依赖

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>
    

    IDEA中连接数据库:右侧Database——>点击+——>选择Data Source——>选择MySQL——>填写数据库的用户名和密码——>点击Test Connection测试功能——>点击Apply——>OK

    点击Database和+ 填写数据库的用户名和密码

    JDBC固定步骤
    ①加载驱动。
    ② 连接数据库。
    ③向数据库发送SQL的对象Statement、PreparedStatement:CRUD。
    ④编写SQL (根据业务编写不同的SQL)。
    ⑤执行SQL。
    ⑥关闭连接。

    package com.ping.jdbc;
    import java.sql.*;
    public class TestJdbc {
      public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //配置信息
        //useUnicode=true&characterEncoding=utf-8 解决中文乱码
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "123456";
        //加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //连接数据库,代表数据库
        Connection connection = DriverManager.getConnection(url, username, password);
        //向数据库发送SQL的对象Statement,PreparedStatement : CRUD
        Statement statement = connection.createStatement();
        //编写SQL
        String sql = "select * from users";
        //执行查询SQL,返回一个 ResultSet  : 结果集
        ResultSet rs = statement.executeQuery(sql);
        while (rs.next()){
          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"));
        }
        //关闭连接,释放资源一定要先开后关
        rs.close();
        statement.close();
        connection.close();
      }
    }
    

    预编译SQL

    package com.ping.jdbc;
    import java.sql.*;
    public class TestJdbc2 {
      public static void main(String[] args) throws Exception {
        //配置信息
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password = "123456";
        //加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //连接数据库
        Connection connection = DriverManager.getConnection(url, username, password);
        //编写SQL
        String sql = "insert into  users(id, name, password, email, birthday) values (?,?,?,?,?);";
        //预编译
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1,2);
        preparedStatement.setString(2,"Ping");
        preparedStatement.setString(3,"123456");
        preparedStatement.setString(4,"2585801995@qq.com");
        preparedStatement.setDate(5,new Date(new java.util.Date().getTime()));
        //执行SQL
        int i = preparedStatement.executeUpdate();
        if (i>0){
          System.out.println("插入成功@");
        }
        //关闭连接,释放资源一定要先开后关
        preparedStatement.close();
        connection.close();
      }
    }
    

    2.事务

    要么都成功,要么都失败!
    ACID原则:保证数据的安全。
    步骤
    ①开启事务
    ②事务提交 commit()
    ③事务回滚 rollback()
    ④关闭事务

    Junit单元测试

    导入依赖

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

    简单使用:@Test注解只有在方法上有效,只要加了这个注解的方法,就可以直接运行。
    创建测试数据库中的表,用来模拟账户转账,可下载使用:https://share.weiyun.com/ddtKuOZf,也可以直接复制下方。

    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);
    

    模拟转账

    @Test
    public void test() {
      //配置信息
      String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
      String username = "root";
      String password = "123456";
      Connection connection = null;
      //加载驱动
      try {
        Class.forName("com.mysql.jdbc.Driver");
        //连接数据库
        connection = DriverManager.getConnection(url, username, password);
        //通知数据库开启事务,false时开启
        connection.setAutoCommit(false);
        String sql = "update account set money = money-100 where name = 'A'";
        connection.prepareStatement(sql).executeUpdate();
        //制造错误
        //int i = 1/0;
        String sql2 = "update account set money = money+100 where name = 'B'";
        connection.prepareStatement(sql2).executeUpdate();
        connection.commit();//以上两条SQL都执行成功了,就提交事务
        System.out.println("success");
      } catch (Exception e) {
        try {
          //如果出现异常,就通知数据库回滚事务
          connection.rollback();
        } catch (SQLException e1) {
          e1.printStackTrace();
        }
        e.printStackTrace();
      }finally {
        try {
          connection.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }
      }
    }
    

    相关文章

      网友评论

        本文标题:JavaWeb之JDBC(复习)

        本文链接:https://www.haomeiwen.com/subject/gfqczktx.html