Problem:
Beim Ausführen einer Abfrage mithilfe eines PreparedStatement In Java tritt eine MySQLSyntaxErrorException mit der Fehlermeldung auf: „Sie haben einen Fehler in Ihrer SQL-Syntax... in der Nähe von „?“ oder „MemberName“. = ?'."
Code:
String query = "select MemberID, MemberName from members where MemberID = ? or MemberName = ?"; Connection conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD); PreparedStatement s = conn.prepareStatement(query); s.setInt(1, 2); s.setString(2, "zen"); ResultSet rs = s.executeQuery(query);
Ursache:
Der Syntaxfehler wird durch die Frage verursacht Markierung (?) in der SQL-Abfrage. MySQL interpretiert es als wörtliches Fragezeichen, nicht als Parameterplatzhalter. Dies führt zu einer ungültigen SQL-Syntax.
Lösung:
Um das Problem zu beheben, ersetzen Sie das Fragezeichen in der SQL-Abfrage durch einen benannten Parameter. Dadurch kann PreparedStatement die Parameterwerte korrekt binden:
String query = "select MemberID, MemberName from members where MemberID = :member_id or MemberName = :member_name";
Verwenden Sie im Java-Code die Methode PreparedStatement#setString, um die benannten Parameter festzulegen:
s.setString("member_id", "2"); s.setString("member_name", "zen");
Alternativ Sie kann die argumentlose Methode s.executeQuery() anstelle von s.executeQuery(query) verwenden, um zu verhindern, dass die vorbereitete Abfrage mit dem Original überschrieben wird Abfrage.
Ressourcenleck:
Beachten Sie, dass der bereitgestellte Code ein Ressourcenleckproblem aufweist. Die Objekte „Connection“, „Statement“ und „ResultSet“ sollten in einem „finally“-Block geschlossen werden, um eine Ressourcenerschöpfung zu verhindern.
Das obige ist der detaillierte Inhalt vonWarum führt mein PreparedStatement in MySQL zu einer Ausnahme „Sie haben einen Fehler in Ihrer SQL-Syntax'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!