JDBC实现多条件查询万能解决思路

主要思路为:
1.思考所需sql语句,在数据库中运行,尝试,查看返回结果集类型;
2.用StringBuffer类对sql语句根据所需条件进行编辑,并封装相应数据;
3.对编译好的String类型sql语句和封装的数据交给PreparedStatement,封装运行sql 得到结果集

1.确定sql语句

首先我们要先了解的问题是多条件查询所需要的sql语句
举例:

select count(1) from table_name where name like '%key%' and ...

然后在数据库运行,进行验证sql语句的可行性
sql返回结果如图,返回值的主键为cout(1),这里很重要!!

2.在java对应类中编辑sql语句,并对相应的数据进行封装

        //使用StringBuffer类来对sql语句进行重组
        StringBuffer sql =new StringBuffer();
        //用于存放数据
			 ArrayList<Object> list =new ArrayList<Object>();
        sql.append("select count(1) from student");
        //判断"reason"字符串是否为空,不为空就添加对应的sql语句,作为其中一个条件
        if (reason!=null && reason.length()>0){
            sql.append(" where reason like ? ");
            list.add("%" + reason + "%");
            //注意,这里对sql中and字符进行分离,防止and出现在不合适的位置
            if (name!=null && name.length()>0){
                sql.append(" and name like ?");
                list.add("%" + name + "%");
                name=null;
            }
        }
			//判断"reason"条件是否为空,不为空就添加对应的sql语句
        if (name!=null && name.length()>0){
            sql.append(" where name like ?");
            list.add("%" + name + "%");
        }
			//对sql语句进行输出,查看是否正确
        System.out.println("SQL-> 语句:" +sql);
        //对list数组转换为Object数组,便于封装preparedStatement
        Object[] objects = list.toArray();

注意:一定要输出sql,防止出现空格缺失等问题,很重要

3.将sql封装成PreparedStatement对象,进行sql查询

PreparedStatement pstm =null;
try {
	pstm = connectionn.prepareStatement(sql.toString());
if (resultSet.next())
	count = resultSet.getInt("count(1)");
} catch (SQLException throwables) {
	throwables.printStackTrace();
}finally {
	BaseDao.closeResource(connectionn,pstm,null);
}
//调用preparedStatement来运行sql语句
for (int i = 0; i < objects.length; i++) {
            preparedStatement.setObject(i+1, objects[i]);
        }
        //返回结果集resultSet,完成查询
        ResultSet resultSet = preparedStatement.executeQuery();

4.取出result中的值

以上方法,查询的结果集中需要数据为count(1)

if (resultSet.next())
              count = resultSet.getInt("count(1)");
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值