• JDBC-API详解-Statement类


    JDBC 访问数据库的步骤

    在这里插入图片描述

    1. 注册和加载驱动(可以省略)
    2. 获取连接
    3. Connection 获取 Statement 对象
    4. 使用 Statement 对象执行 SQL 语句
    5. 返回结果集
    6. 释放资源

    API下的Statement

    在这里插入图片描述


    一. Statement 作用

    代表一条语句对象,用于发送 SQL 语句给服务器,用于执行静态 SQL 语句并返回它所生成结果的对象。

    二. Statement 的方法

    方法名描述
    int excuteUpdate(sql)执行DML ,DDL语句 返回值DML语句影响行数,但是DQL语句执行后也可能返回0
    ResultSet executeQuery(String sql)执行DQL语句 返回值:ResultSet结果集对象

    三. 使用步骤

    1.DML

    代码如下(示例):

    package Web.JDBCDemo;
    
    import org.junit.Test;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.Statement;
    
    public class JDBCDemo3 {
    
        @Test
        public void testDML() throws Exception {
            //1. 注册驱动
            //Class.forName("com.mysql.jdbc.Driver");
            //2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化书写
            String url = "jdbc:mysql:///db1?useSSL=false";
            String username = "root";
            String password = "1234";
            Connection conn =
                    DriverManager.getConnection(url, username, password);
            //3. 定义sql
            String sql = "update account set money = 3000where id = 1";
            //4. 获取执行sql的对象 Statement
            Statement stmt = conn.createStatement();
            //5. 执行sql
            int count = stmt.executeUpdate(sql);//执行完DML语句,受影响的行数
            //6. 处理结果
            //System.out.println(count);
            if (count > 0) {
                System.out.println("修改成功~");
            } else {
                System.out.println("修改失败~");
            }
            //7. 释放资源
            stmt.close();
            conn.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    在这里插入图片描述

    2.DDL

    代码如下(示例):

    ```java
    package Web.JDBCDemo;
    
    import org.junit.Test;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.Statement;
    
    public class JDBCDemo3 {
    
        @Test
        public void testDML() throws Exception {
            //1. 注册驱动
            //Class.forName("com.mysql.jdbc.Driver");
            //2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化书写
            String url = "jdbc:mysql:///db1?useSSL=false";
            String username = "root";
            String password = "1234";
            Connection conn =
                    DriverManager.getConnection(url, username, password);
            //3. 定义sql
            String sql = "create table db2";
            //4. 获取执行sql的对象 Statement
            Statement stmt = conn.createStatement();
            //5. 执行sql
            int count = stmt.executeUpdate(sql);//执行完DDML语句,受影响的行数
            //6. 处理结果是0,也是很有可能创建成功
            //System.out.println(count);
            //7. 释放资源
            stmt.close();
            conn.close();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    注意:以后开发很少使用java代码操作DDL语句


    3.DQL

    1. ResultSet接口(结果集对象)的
      • 作用:封装了DQL查询语句的结果,对结果集进行遍历,取出每一条记录
        在这里插入图片描述
      • ResultSet 接口中的方法
    方法名说明
    boolean next()1. 游标向下移动 1行 /// 2. 返回 boolean 类型,如果还有下一条记录,返回 true,否则返回 false
    数据类型 getXxx()1. 通过字段名,参数是 String 类型。返回不同的类型 ///2. 通过列号,参数是整数,从 1 开始。返会不同的类型

    在这里插入图片描述

    1. 常用数据类型转换表
      在这里插入图片描述

    2. 确保数据库中有 3 条记录,查询所有的账户表里面的信息
      例题:将account表中数据通过java代码实现打印出来
      在这里插入图片描述

      @Test
        public void testDQL() throws Exception {
            Class.forName("com.mysql.jdbc.Driver");
            //2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化书写
            String url = "jdbc:mysql:///db1?useSSL=false";
            String username = "root";
            String password = "o676448";
            Connection conn = DriverManager.getConnection(url, username, password);
            //4. 获取执行sql的对象 Statement
            Statement stmt = conn.createStatement();
            //5. 执行sql
            ResultSet count = stmt.executeQuery("select *from account");//执行完DML语句,受影响的行数
            //6. 处理结果
    
            /** Statement类:
             ResultSet executeQuery(String sql)	执行DQL语句 返回值:ResultSet结果集对象
             ResultSet接口:
             boolean next()	1. 游标向下移动 1行 /// 2. 返回 boolean 类型,如果还有下一条记录,返回 true,否则返回 false
             数据类型 getXxx()	1. 通过字段名,参数是 String 类型。返回不同的类型 ///2. 通过列号,参数是整数,从 1 开始。返会不同的类型                    */
    
            while (count.next()){
                //通过列名获取
                int id = count.getInt("id");
                String name = count.getString("name");
                double money = count.getDouble("money");
               /*
    
                    通过索引获取   注意:从1开始
                count.getInt("1");
                count.getString("2");
                count.getDouble("3");
                */
                System.out.println(id);
                System.out.println(name);
                System.out.println(money);
                System.out.println("----------------");
    
            }
            //7. 释放资源
            count.close();
            stmt.close();
            conn.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    例题分析:
    在这里插入图片描述

    四. 案例(重点)

    • 需求:查询account账户表数据,封装为Account对象中,并且存储到ArrayList集合中
      在这里插入图片描述

    • 问题分析
      查询account账户表数据,封装为Account对象中,并且存储到ArrayList集合

      1. 定义实体类Account
        在这里插入图片描述

      2. 查询数据,封装到Account对象中

      3. 将Account对象存入ArrayList集合中

    • 代码实现:

    account类

    package Web.pojo;
    
    public class account {
        private int id;
        private String name;
        private  double money;
    
        public account() {
        }
    
        public account(int id, String name, double money) {
            this.id = id;
            this.name = name;
            this.money = money;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public double getMoney() {
            return money;
        }
    
        public void setMoney(double money) {
            this.money = money;
        }
    
        @Override
        public String toString() {
            return "account{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", money=" + money +
                    '}';
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    ResultDemo类

     @Test
        public void testDQL() throws Exception {
            Class.forName("com.mysql.jdbc.Driver");
            //2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化书写
            String url = "jdbc:mysql:///db1?useSSL=false";
            String username = "root";
            String password = "o676448";
            Connection conn = DriverManager.getConnection(url, username, password);
            //4. 获取执行sql的对象 Statement
            Statement stmt = conn.createStatement();
            //5. 执行sql
            ResultSet count = stmt.executeQuery("select *from account");//执行完DML语句,受影响的行数
            //6. 处理结果
    
            /** Statement类:
             ResultSet executeQuery(String sql)	执行DQL语句 返回值:ResultSet结果集对象
             ResultSet接口:
             boolean next()	1. 游标向下移动 1行 /// 2. 返回 boolean 类型,如果还有下一条记录,返回 true,否则返回 false
             数据类型 getXxx()	1. 通过字段名,参数是 String 类型。返回不同的类型 ///2. 通过列号,参数是整数,从 1 开始。返会不同的类型                    */
    
            /**
             * 建立ArrayList集合
             */
            ArrayList<account> arr = new ArrayList<account>();
    
            while (count.next()){
                /**
                 * 新建account类存储信息
                 */
    
                account at = new account();
    
                //通过列名获取
                int id = count.getInt("id");
                String name = count.getString("name");
                double money = count.getDouble("money");
    
               /*     通过索引获取   注意:从1开始
                int anInt = count.getInt("1");
                String string = count.getString("2");
                double aDouble = count.getDouble("3");
    */
    
                at.setId(id);
                at.setName(name);
                at.setMoney(money);
    
                /**
                 *  把account类装入集合中
                 */
    
                arr.add(at);
    
            }
    
            System.out.println(arr);
    
            //7. 释放资源
            count.close();
            stmt.close();
            conn.close();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    在这里插入图片描述

  • 相关阅读:
    基于SpringBoot的在线学生请假管理系统的设计与实现毕业设计源码060935
    GBase 8s 执行计划查询分析
    C++ STL 【priority_queue】
    Redis(五)的事务
    社交网络分析的 R 基础:(六)绘图操作
    Python3----------抽象(多态、封装、继承等)
    windows下载redis、windows安装redis、windows启动redis
    修改Qt源码支持DPI粒度到QWidget
    iperf3: error - unable to connect to server: No route to host 但嵌入式Linux设备
    什么是防火墙以及如何工作
  • 原文地址:https://blog.csdn.net/o676448/article/details/126770249