首页 > 其他分享 >9 JDBC复习

9 JDBC复习

时间:2022-09-23 14:36:43浏览次数:49  
标签:JDBC 复习 数据库 SQL connection mysql password String

JDBC:Java DataBase Connectivity
Application-统一驱动JDBC-MySQL驱动(mysql.Driver)-MySQL
需要jar包的支持:java.sql、javax.sql、mysql-connector-jar-*.jar连接驱动

建表和插入数据

CREATE TABLE stu(
    id INT PRIMARY KEY,
    `name` VARCHAR(40),
    `password` VARCHAR(40),
    email VARCHAR(60),
    birthday DATE`student`
);
INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(1,'张三','123456','[email protected]','2000-01-01');
INSERT INTO users(id,`name`,`password`,email,birthday)
VALUES(2,'李四','123456','[email protected]','2000-01-01');

导入数据库依赖

<!-- mysqld的驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

固定步骤

  1. 配置信息,加载驱动
  2. 连接数据库
  3. 向数据库发送SQL的对象Statement:CRUD
  4. 编写SQL(根据业务)
  5. 执行SQL
  6. 关闭连接

statement,不安全,存在sql注入风险

public class TestJdbc {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //配置信息
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8&useSSL=true";
        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 statement = connection.createStatement();
        //4.编写SQL
        String sql="select * from users";
        //5.执行查询SQL,ResultSet结果集
        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()){
            System.out.println("id="+resultSet.getObject("id"));
            System.out.println("name="+resultSet.getObject("name"));
            System.out.println("password="+resultSet.getObject("password"));
            System.out.println("email="+resultSet.getObject("email"));
            System.out.println("birthday="+resultSet.getObject("birthday"));
            System.out.println("--------------------------");
        }
        //6.关闭连接,释放资源(一定要关,先开后关)
        resultSet.close();
        statement.close();
        connection.close();
    }
}

prepareStatement预编译,安全,防止SQL注入

public class TestJdbc2 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //配置信息
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8&useSSL=true";
        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) VALUES(?,?,?,?,?);";
        //4.预编译,preparedStatement安全
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1,4);
        preparedStatement.setString(2,"赵六");
        preparedStatement.setString(3,"123456");
        preparedStatement.setString(4,"[email protected]");
        preparedStatement.setDate(5,new Date(new java.util.Date().getTime()));
        //5.执行查询SQL
        int i = preparedStatement.executeUpdate();
        if(i>0){
            System.out.println("新增成功。");
        }else{
            System.out.println("新增失败。");
        }
        //6.关闭连接,释放资源(一定要关,先开后关)
        preparedStatement.close();
        connection.close();
    }
}

事务
ACID原则是数据库事务正常执行的四个:

  1. 原子性,一个事务要么全部执行,要么不执行。
  2. 一致性,事务的运行不改变数据库中数据的一致性。
  3. 独立性,也称隔离性,两个以上的事务不会出现交错执行的状态。
  4. 持久性,不会无缘无故的回滚。

步骤:

  1. 开启事务
  2. 事务提交commit()
  3. 事务回滚rollback()
  4. 关闭事务

转账:A1000,B1000,A900-100-B1100

public class TestJdbc3 {

    @Test
    public void test() {
        //配置信息
        String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf8&useSSL=true";
        String username="root";
        String password="123456";
        Connection connection=null;
        try {
            //1.加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.连接数据库,代表数据库
            connection = DriverManager.getConnection(url, username, password);
            //3.通知数据库开启事务
            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();//以上2条sql都执行成功了,就提交事务。
            System.out.println("success");
        } catch (Exception e) {
            try {
                //如果出现异常,数据库回滚。
                connection.rollback();
            } catch (SQLException ex) {
                throw new RuntimeException(ex);
            }
            e.printStackTrace();
        }finally {
            try {
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

    }
}

标签:JDBC,复习,数据库,SQL,connection,mysql,password,String
From: https://www.cnblogs.com/liweixiao/p/16716281.html

相关文章

  • JDBC(MySQL)
    JDBC(MySQL)​ 使用JDBCUtils的优点,在我们有大量使用mysql的数据库的情况下,我们可以通过更改jdbc.properties配置文件就可以修改数据库的配置,而不是寻找代码然后在一次次......
  • golang语法复习
    标识符大小写当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需......
  • JDBC连接数据库增删改查实例
    查询所有dao层代码:packageexample;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;......
  • Failed to download 'https://github.com/xerial/sqlite-jdbc/releases/download/3.39
    1.原因外网原因无法下载2.解决办法下载sqlite-jdbc-3.39.2.0.jar,放这个目录下:C:\用户\你的用户名\AppData\Roaming\JetBrains\PyCharm2021.1\jdbc-drivers\XerialS......
  • 归档 220920 | CSP-J 复习
    所以为什么要复习J组所以为什么我连J组都不会,哭唧唧A.加工零件一开始的想法是,如果点\(x\)离\(1\)的距离大于等于\(L\),且与\(L\)奇偶性相同,那么就可行。然......
  • 复习元组列表字典
    元组能存储多个不同类型的数据,且是有序的。但它是不可变的,因此不能进行修改、删除或添加元素的操作。列表和元组非常相似,唯一的不同是列表的元素是可以修改的。字典的元素......
  • JDBC入门详解
    JDBC概念JDBC就是Java操作关系型数据库的一套API,其中真正的实现类由不同的数据库驱动(也就是jar包)实现。JDBC连接数据库步骤创建项目,导入jar包注册驱动,即告诉Java代码......
  • sb课件的题解(复习)
    sb课件的题解(复习)不理解,为什么一个新的课件我就2题没做过,没救了CF1310C这题,我们发现它不同的子段共有\(n*(n-1)/2\)个,将其按字典序排序我们需要便捷的比较,考虑维护\(......
  • CSS的复习笔记
    css:-层叠样式表-网页实际上是一个多层的结构,通过css可以分别为网页的每一个层来设置样式而最终我们能看到只是网页的最上边一层-总之一句话,css用来设置网页中元素的样式。......
  • Spring基础 02 | JdbcTemplate
    JdbcTemplateSpring对Jdbc的Api简单封装开发步骤1.导入Spring-jdbc、spring-tx坐标2.创建数据库表和实例3.创建jdbcTemplate对象4.执行数据库操作导入坐标<de......