用于LIKE的Java PreparedStatement SQL语法

时间:2010-12-09 00:48:32

标签: java mysql mysql-error-1064

我有一个准备好的陈述:

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%';"

任何建议?

2 个答案:

答案 0 :(得分:1)

我看到因为尾随而导致数据库炸弹爆炸;在动态SQL之前。删除它会导致它工作吗?

答案 1 :(得分:1)

我也在PreparedStatemts中看到了分号问题。

此外,该方法的参数称为'grp',但在调用setString时使用'group'。这是类型o,还是问题的一部分? group.toString()应该足够了,不需要valueOf / longValue。

另一件事,'group'是MySQL中的保留字。