【JDBC】IDEA连接数据库,执行查询操作,返回结果集并输出。

2022-11-15 14:04:22 浏览数 (1)

CSDN话题挑战赛第2期 参赛话题:学习笔

JDBC专栏

(点击进入专栏) 【1】idea添加mysql-jar包 【2】使用IDEA连接数据库,执行增删改操作。 【3】IDEA连接数据库,执行查询操作,返回结果集并输出。


连接数据库,查询并输出结果集

  • JDBC专栏
  • 前言
  • 一、与数据库建立连接
    • 1.加载驱动,利用驱动管理器连接数据库
    • 2.编写查询操作的SQL语句
  • 二、执行查询操作,返回结果集
    • 1.创建fruit类,用于创建保存信息的fruit对象
    • 2.执行查询操作:
    • 3.关闭资源
    • 4.返回结果集:

前言

这篇文章将要介绍的,利用JDBC规范实现的查询操作,与上一篇文章中的增删改操作,是存在一致性的。 例如:加载驱动,利用驱动管理器连接数据库等;而不一样的地方在于,执行增删改使用的是更新方法executeUpdate(),接下来我们将使用新的方法,查询方法executeQuery()


一、与数据库建立连接

1.加载驱动,利用驱动管理器连接数据库

代码语言:javascript复制
        //加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //驱动管理器,输入URL,用户名,密码
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/fruitdb?useSSL=false&useUnicode=true&CharacterEncoding=utf-8", "root", "..密码..");

这一步骤是需要进行异常处理的,这里暂时将异常抛出,不进行解决。 jdbc:mysql:// 是通信地址URL的固定开头 localhost:3306/ 代表本地连接,3306则是MySQL数据库的默认端口号 注意:若想在URL中添加需要的参数,首先使用 ?连接,如果需要带多个参数,第二个参数开始需要用&连接。

2.编写查询操作的SQL语句

在数据库中,查询操作是需要先应用指定的数据库,之后用查询的SQL语句查询信息:

代码语言:javascript复制
USE fruitdb;
SELECT * FROM t_fruit;

而到了IDEA中,我们需要将SQL语句作为字符串保存起来,在对SQL语句的字符串进行预处理,若语句中有为指定的参数,还需要用预处理对象来填充参数。

查询所有信息:

代码语言:javascript复制
String sql = "select * from t_fruit";//查询全部

//创建预处理对象命令
PreparedStatement pstm = connection.prepareStatement(sql);

//查询操作的sql语句中没有 ? ,不需要进行参数填充

查询指定行信息:

代码语言:javascript复制
String sql = "select * from t_fruit where fid = ?";//查询指定行

//创建预处理对象命令
PreparedStatement pstm = connection.prepareStatement(sql);

//有未指定参数?,使用预处理对象填充参数
pstm.setInt(1,5);//填充数值(需填充参数位置,填充值)

查询数据总数:

代码语言:javascript复制
String sql = "select count(*) from t_fruit";//查询列表数量

PreparedStatement pstm = connection.prepareStatement(sql);

二、执行查询操作,返回结果集

1.创建fruit类,用于创建保存信息的fruit对象

为了将每一行的所有内容输出,我们需要创建一个Fruit类,提供相应的方法,借此创建保存了一行所有数据信息的fruit对象。 再使用集合存储所有的fruit对象,最终进行输出(返回结果集)。

提供了各种构造方法以及Get,Set方法的fruit类

代码语言:javascript复制
/**
 * @author .29.
 * @create 2022-09-15 21:45
 */
public class Fruit {
    public Fruit() {
    }

    public Fruit(Integer fid, String fname, Integer price, Integer fcount, String remark) {
        this.fid = fid;
        this.fname = fname;
        this.price = price;
        this.fcount = fcount;
        this.remark = remark;
    }

    @Override
    public String toString() {
        return "Fruit{"  
                "fid="   fid  
                ", fname='"   fname   '''  
                ", price="   price  
                ", fcount="   fcount  
                ", remark='"   remark   '''  
                '}';
    }

    public Integer getFid() {
        return fid;
    }

    public void setFid(Integer fid) {
        this.fid = fid;
    }

    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public Integer getPrice() {
        return price;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    public Integer getFcount() {
        return fcount;
    }

    public void setFcount(Integer fcount) {
        this.fcount = fcount;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

        private Integer fid;
        private String fname;
        private Integer price;
        private Integer fcount;
        private String remark;



}

2.执行查询操作:

在这一步,我们需要使用刚才创建的预处理命令对象,调用查询操作的方法:executeQuery(),遍历查询得到的每一行信息,将数据放入fruit对象,再用集合存放起来。

代码语言:javascript复制
        //执行查询,返回结果集
        ResultSet rs = pstm.executeQuery();

        List<Fruit> list = new ArrayList<>();//创建集合,利用泛型声明存放类型为Fruit对象
        while(rs.next()){                    //利用循环,遍历查询到的每一行信息
            //将每一行中,每一列的信息都记录下来
            //rs对象的get方法中,可以填充列的位置,也可以填充列名来指定
            int fid = rs.getInt(1);
            String fname = rs.getString("fname");
            int price = rs.getInt(3);
            int fcount = rs.getInt("fcount");
            String remark = rs.getString(5);
            ///将每一行的信息都存放进Fruit对象
            Fruit fruit = new Fruit(fid,fname,price,fcount,remark);
            list.add(fruit);//再用集合存放
            }

3.关闭资源

重要的一步:

代码语言:javascript复制
        //关闭资源
        rs.close();
        pstm.close();
        connection.close();

4.返回结果集:

遍历集合,输出结果集:

代码语言:javascript复制
       list.forEach(System.out::println);

完整的代码:

代码语言:javascript复制
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author .29.
 * @create 2022-09-21 23:15
 */
public class Demo04 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //加载驱动
        Class.forName("com.mysql.jdbc.Driver");
        //驱动管理器,输入URL,用户名,密码
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/fruitdb?useSSL=false&useUnicode=true&CharacterEncoding=utf-8", "root", "Deng07112003");

        String sql = "select * from t_fruit";//查询全部

        PreparedStatement pstm = connection.prepareStatement(sql);

        //执行查询,返回结果集
        ResultSet rs = pstm.executeQuery();

        List<Fruit> list = new ArrayList<>();//创建集合,利用泛型声明存放类型为Fruit对象
        while(rs.next()){                    //利用循环,遍历查询到的每一行信息
            //将每一行中,每一列的信息都记录下来
            //rs对象的get方法中,可以填充列的位置,也可以填充列名来指定
            int fid = rs.getInt(1);
            String fname = rs.getString("fname");
            int price = rs.getInt(3);
            int fcount = rs.getInt("fcount");
            String remark = rs.getString(5);
            ///将每一行的信息都存放进Fruit对象
            Fruit fruit = new Fruit(fid,fname,price,fcount,remark);
            list.add(fruit);//再用集合存放
        }
        //关闭资源
        rs.close();
        pstm.close();
        connection.close();

        list.forEach(System.out::println);
    }
}

返回结果:

对比数据库中数据:

完成啦…

0 人点赞