当需要查询的语句带有参数时
执行预编译后
**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;
}