ResultSet rs = pstm.executeQuery(sql); 报错 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:

当需要查询的语句带有参数时
执行预编译
**1.原因:**不能在下面这条语句中插入sql值
**2.理由:**因为预编译已经改变了sql语句,向语句中的问号?插入了值,如果在rs语句中插入sql,会导致执行的是原来带问号的sql语句。也就是说预编译的sql语句没有被执行,mysql不能执行带问号的sql语句,所以报错

ResultSet rs = pstm.executeQuery(sql);

DB中的原码(正确)

    //工具方法,sql语句集合,方便调用
    //遍历出数据库中的数据显示在网页
    public static List<Critique> critiqueFind(String sql, Object... objects) throws SQLException {
        //预编译,PreparedStatement:是Statement的子接口,可以传入带占位符的SQL语句,提供了补充占位符变量的方法
        PreparedStatement pstm = connection.prepareStatement(sql);
        //多个?查询

        for (int i = 0;i<objects.length;i++){
            pstm.setObject(i+1,objects[i]);
        }

        ResultSet rs = pstm.executeQuery();
//        System.out.println("$$$$$$$$$$$$$$$$$$$$$"+sql);
        List<Critique> list = new ArrayList<>();
        while (rs.next()) {
            Critique critique = new Critique();
            critique.setId(rs.getInt("id"));
            critique.setArticle_id(rs.getInt("article_id"));
            critique.setContent(rs.getString("content"));
            critique.setName(rs.getString("name"));
            critique.setTime(rs.getString("time"));
            critique.setPhoto(rs.getString("photo"));
            critique.setType(rs.getString("type"));
            critique.setNotice(rs.getString("notice"));
            list.add(critique);
        }
        return list;
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值