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语句的字符串进行预处理,若语句中有为指定的参数,还需要用预处理对象来填充参数。
查询所有信息:
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.返回结果集:
遍历集合,输出结果集:
代码语言: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);
}
}
返回结果:
对比数据库中数据:
完成啦…