2010-12-09 43 views
2

我有一份聲明中像這樣:的Java PreparedStatement的SQL語法LIKE

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); 
    } 
} 

的conections準備好了,但是出現語法錯誤,準備好的語句的解析值如下:

"SELECT * 
    FROM table 
    WHERE group LIKE '%grp%';" 

有何建議?

+0

0123n用於編輯內聯,我試過4個空格,但它沒有工作.. – Triztian 2010-12-09 00:56:04

+0

你確定應該有一個逗號+「,%」 – 2010-12-09 01:03:27

+0

是的,它是一個整數分隔列表: 1, 3,56,7,8,6,5,6 – Triztian 2010-12-09 01:04:29

回答

1

我也看到了PreparedStatemts中的分號問題。

另外,該方法的參數被稱爲'grp',但'group'正在用於調用setString。這是類型o還是問題的一部分? group.toString()應該足夠了,不需要valueOf/longValue的東西。

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

1

我見過數據庫炸彈因爲尾隨;在動態SQL之前。刪除它會導致它的工作?