前言
这篇文章将要介绍的,利用JDBC规范实现的查询操作,与上一篇文章中的增删改操作,是存在一致性的。
例如:加载驱动,利用驱动管理器连接数据库等;而不一样的地方在于,执行增删改使用的是更新方法executeUpdate(),接下来我们将使用新的方法,查询方法executeQuery()。
一、与数据库建立连接
1.加载驱动,利用驱动管理器连接数据库
//加载驱动 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语句查询信息:
USE fruitdb; SELECT * FROM t_fruit;
而到了IDEA中,我们需要将SQL语句作为字符串保存起来,在对SQL语句的字符串进行预处理,若语句中有为指定的参数,还需要用预处理对象来填充参数。
查询所有信息:
String sql = "select * from t_fruit";// //创建预处理对象命令 PreparedStatement pstm = connection.prepareStatement(sql); //查询操作的sql语句中没有 ? ,不需要进行参数填充
查询指定行信息:
String sql = "select * from t_fruit where fid = ?";//查询指定行 //创建预处理对象命令 PreparedStatement pstm = connection.prepareStatement(sql); //有未指定参数?,使用预处理对象填充参数 pstm.setInt(1,5);//填充数值(需填充参数位置,填充值)
查询数据总数:
String sql = "select count(*) from t_fruit";//查询列表数量 PreparedStatement pstm = connection.prepareStatement(sql);
二、执行查询操作,返回结果集
1.创建fruit类,用于创建保存信息的fruit对象
为了将每一行的所有内容输出,我们需要创建一个Fruit类,提供相应的方法,借此创建保存了一行所有数据信息的fruit对象。
再使用集合存储所有的fruit对象,最终进行输出(返回结果集)。
提供了各种构造方法以及Get,Set方法的fruit类
/** * @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对象,再用集合存放起来。
//执行查询,返回结果集 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.关闭资源
重要的一步:
//关闭资源 rs.close(); pstm.close(); connection.close();
4.返回结果集:
遍历集合,输出结果集:
list.forEach(System.out::println);
完整的代码:
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); } }
返回结果:
对比数据库中数据:
完成啦…
如果你觉得有帮助:
✨点赞✨
✨收藏✨
✨关注✨
✨评论✨