Java PreparedStatement SQL синтаксис для LIKE - PullRequest
2 голосов
/ 09 декабря 2010

У меня есть подготовленный оператор:

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 ]

1 голос
/ 09 декабря 2010

Я также видел проблемы с точкой с запятой в PreparedStatemts.

Кроме того, параметр метода называется «grp», но «group» используется в вызове setString. Это тип или часть проблемы? group.toString () должно быть достаточно, нет необходимости для значения valueOf / longValue.

Еще одна вещь, «группа» - зарезервированное слово в MySQL.

1 голос
/ 09 декабря 2010

Я видел бомбу БД из-за трейлинга; в динамическом SQL раньше. Удаляет ли это удаление?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...