会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132360个问题
JAVA 全系列/第三阶段:数据库编程/Oracle 数据库的使用 1441楼
JAVA 全系列/第三阶段:数据库编程/JDBC技术 1442楼
JAVA 全系列/第三阶段:数据库编程/Oracle 数据库的使用 1443楼
JAVA 全系列/第三阶段:数据库编程/JDBC技术(旧) 1446楼


1651156283(1).png

package com;

import com.mysql.jdbc.PreparedStatement;

import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class DynamicConditionQuertTest {
    /**
     * 动态条件查询Users
     */
    public List<Users> queryUser(Users users){
        List<Users> list = new ArrayList<>();

        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet rs = null ;
        try {
            //创建链接
            connection = jdbcUtill.getConnection();
            //拼接查询sql语句
            String sql = this.generateSql(users);
            System.out.println(sql);
            //创建PreparedStatement对象
            ps = (PreparedStatement) connection.prepareStatement(sql);
            //执行sql
            rs = ps.executeQuery();
            while (rs.next()){
                Users users1 = new Users();
                users1.setUserid(rs.getInt("userid"));
                users1.setUserage(rs.getInt("userage"));
                users1.setUsername(rs.getString("username"));
                list.add(users1);
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            jdbcUtill.closeResource(rs,ps,connection);
        }
        return list;
    }

    /**
     * 生成动态条件查询sql
     * @param
     */
    public String generateSql(Users users){
        StringBuffer sb = new StringBuffer("select * from users where 1=1");

        if (users.getUserid()>0){
            sb.append("and userid = ").append(users.getUserid());
        }
        if(users.getUsername()!=null&&users.getUsername().length()>0){
            sb.append("and username = '").append(users.getUsername()).append("'");

        }
        if (users.getUserage()>0){
            sb.append("and userage =").append(users.getUserage());
        }
        return sb.toString();

    }

    public static void main(String[] args) {
        DynamicConditionQuertTest dcq = new DynamicConditionQuertTest();
        Users users1 = new Users();
        users1.setUsername("xiaoming");
        users1.setUserage(23);
        List<Users> list = dcq.queryUser(users1);

        for (Users users2 :list){
            System.out.println(users2.getUserid()+" "+users2.getUsername()+" "+users2.getUserage());
        }

    }
}


异常报错

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'username = 'xiaoming'and userage =23' at line 1


我没加限定条件

 users1.setUsername("xiaoming");
        users1.setUserage(23);

是没报错的,加了反而报错不知道为什么,老师看一下

JAVA 全系列/第三阶段:数据库编程/JDBC技术 1447楼
JAVA 全系列/第三阶段:数据库编程/SQL 语言 1448楼
JAVA 全系列/第三阶段:数据库编程/MySQL数据库的使用 1450楼
JAVA 全系列/第三阶段:数据库编程/MySQL数据库的使用 1451楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637