我有一个准备好的陈述:
private static final String SQL_LIST_GROUP = "SELECT *
FROM table
WHERE group LIKE ?;"
我的函数,我的函数如下(缩短并正确声明了SQL对象):
public List< MyType > getGroupList(Long grp) {
Connection link = null;
PreparedStatement query = null;
ResultSet rstList = null;
List< MyType > list = new ArrayList< MyType >();
try {
link = MySQL.getConnection();
link.setAutoCommit(false);
query = link.prepareStatement(SQL_LIST_GROUP);
query.setString(1, "%"+grp.toString()+",%");
rstList = query.executeQuery();
link.commit();
while (rstList.next()) {
list.add(MapFields(rstList));
}
return list;
} catch (SQLException e) {
throw new DAOException(e);
} finally {
close(link, query, rstList);
}
}
连接正确,但是我收到语法错误,带有解析值的预准备语句如下:
"SELECT *
FROM table
WHERE group LIKE '%grp%';"
任何建议?
答案 0 :(得分:1)
我看到因为尾随而导致数据库炸弹爆炸;在动态SQL之前。删除它会导致它工作吗?
答案 1 :(得分:1)
我也在PreparedStatemts中看到了分号问题。
此外,该方法的参数称为'grp',但在调用setString时使用'group'。这是类型o,还是问题的一部分? group.toString()应该足够了,不需要valueOf / longValue。
另一件事,'group'是MySQL中的保留字。