首页 > 技术文章 > JDBC学习

wellzzz 2021-07-08 19:43 原文

JDBC

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

需要jar包的支持:

  • java.sql
  • javax.sql
  • mysql-conneter-java 连接驱动(必须的)

实验环境搭建

导入数据库依赖

        <!--mysql的驱动-->
        <dependency>
            <groupid>mysql</groupid>
            <artifactid>mysql-connector-java</artifactid>
            <version>5.1.45</version>
        </dependency>
    

IDEA中连接数据库

JDBC固定步骤

  1. 加载驱动
  2. 连接数据库,代表数据库
  3. 向数据库发送SQL的对象Statement:CRUD
  4. 编写SQL(根据业务,不同的SQL)
  5. 执行查询SQL,返回一个ResultSet : 结果集
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";

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

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

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

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

        //5.执行查询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"));
        }

        //6.关闭连接,,释放资源(一定要做) 先开的后关
        rs.close();
        statement.close();
        connection.close();
    }
}
// String sql = "delete from users where id = 3"

 //受影响的行数,增删改都是用executeUpdate 即可
 //int i = statement.executeUpdate(sql);

预编译SQL

public class TestJDBC2 {
        public static void main(String[] args) throws Exception {
            //配置信息
            //useUnicode=true&characterEncoding=utf-8   解决中文乱码
            String url = "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
            String username = "root";
            String password ="123456";

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

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

            //3.编写SQL
            String sql = "insert into users(id,name,password,email,birthday) value (?,?,?,?,?);";

            //4.预编译
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setInt(1,4);//给第一个占位符? 的值赋值为1;
            preparedStatement.setString(2,"哈哈哈");//给第二个占位符? 的值赋值为1;
            preparedStatement.setString(3,"123456");//给第三个占位符? 的值赋值为1;
            preparedStatement.setString(4,"151234@qq.com");//给第四个占位符? 的值赋值为1;
            preparedStatement.setDate(5,new Date(new java.util.Date().getTime()));//给第五个占位符? 的值赋值为1;


            //5.执行SQL
            int i = preparedStatement.executeUpdate();
            if (i > 0) {
                System.out.println("插入成功");
            }


            //6.关闭连接,,释放资源(一定要做) 先开的后关
            preparedStatement.close();
            connection.close();
        }
    }

事务

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

ACID原则:保证数据的安全。

开启事务
事务提交	commit()
事务回滚  	rollback()
关闭事务
    
    
转账:
A:(1000)
B:(1000)

A(900)-->100 -->B(1100)

Junit单元测试

依赖

<!--单元测试-->
<dependency>
    <groupid>junit</groupid>
    <artifactid>junit</artifactid>
    <version>3.8.1</version>
</dependency>

简单使用

@Test注解只有在方法上有效,只要加了这个注解的方法,就可以直接运行!

    @Test
    public void test(){
        System.out.println("Hello");
    }
}

搭建一个环境

转账失败案例

  1. 加载驱动
  2. 连接数据库,代表数据库
  3. 通知数据库开启事务,false是开启
package com.wel.test;

import org.junit.Test;

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

public class TestJDBC3 {

    @Test
    public void test(){
        //配置信息
        //useUnicode=true&characterEncoding=utf-8   解决中文乱码
        String url = "jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";
        String username = "root";
        String password ="123456";

        Connection connection = null;

        //1.加载驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
        //2.连接数据库,代表数据库
         connection = DriverManager.getConnection(url, username, password);

        //3.通知数据库开启事务,false是开启
        connection.setAutoCommit(false);
        String sql1 = "update account set money = money - 100 where name = 'A'";
        connection.prepareStatement(sql1).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("成功");
        } catch (Exception e) {
            try {
                //如果出现异常,就通知数据库回滚事务
                connection.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
    }finally {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }


    }
}

推荐阅读