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

在这里插入图片描述

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

注意:以后开发很少使用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();
    }

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

四. 案例(重点)

  • 需求:查询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 +
                '}';
    }
}

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发热的嘤嘤怪(2003计科胜胜同学)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值