2010-12-09 14 views
2

ich als so eine vorbereitete Erklärung haben:Java PreparedStatement SQL-Syntax für LIKE

private static final String SQL_LIST_GROUP = "SELECT * 
               FROM table 
               WHERE group LIKE ?;" 

Meine Funktion, meine Funktion ist wie folgt (verkürzt und SQL-Objekte ordnungsgemäß deklariert):

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

Die conections sind richtig gemacht, aber ich bekomme einen Syntaxfehler, ist die vorbereitete Anweisung mit dem Wert geparst wie folgt:

Irgendwelche Vorschläge?

+0

thnks für die Inline-Bearbeitung, ich habe die vier Räume versucht, aber es hat nicht funktioniert .. – Triztian

+0

Sind Sie sicher, sollte es ein Komma in + „“% sein –

+0

ja, es ist eine ganze Zahl Liste getrennt: 1, 3,56,7,8,6,5,6 – Triztian

Antwort

1

Ich habe auch Probleme mit Semikolons in PreparedStatemts gesehen.

Auch der Parameter der Methode heißt 'grp', aber 'group' wird im Aufruf von setString verwendet. Ist das ein Typ-o oder ein Teil des Problems? group.toString() sollte ausreichen, keine Notwendigkeit für den valueOf/longValue-Kram.

Eine andere Sache, "Gruppe" ist ein reserviertes Wort in MySQL.

+0

Ja, das ist ein Tippfehler, wird es sofort korrigieren .. Ich habe nie an die toString() -Methode gedacht, großen Beitrag auch ich wusste nicht, dass "Gruppe" ein reserviertes Wort war, werde ich das Feld dank ändern . – Triztian

+0

Das Feld von "Gruppe" in "Gilde" umbenannt, löst das Problem. – Triztian

1

Ich habe eine DB-Bombe wegen eines Schleppens gesehen; in dynamischem SQL vorher. Entfernt das Entfernen, dass es funktioniert?

+0

das Semikolon betrifft überhaupt nichts, ich habe es in MySQL WorkBench ohne Probleme versucht, tatsächlich mag ich es zu verwenden. – Triztian

+0

Gut zu wissen. Ich glaube an Oracle und DB2 ist ein Problem. Entschuldigung, meine Antwort hat Ihr Problem nicht gelöst. –

+0

Keine Sorge, jeder Standpunkt ist nützlich. – Triztian