Heim > Java > javaLernprogramm > Warum führt mein PreparedStatement in MySQL zu einer Ausnahme „Sie haben einen Fehler in Ihrer SQL-Syntax'?

Warum führt mein PreparedStatement in MySQL zu einer Ausnahme „Sie haben einen Fehler in Ihrer SQL-Syntax'?

Linda Hamilton
Freigeben: 2024-12-06 19:24:12
Original
815 Leute haben es durchsucht

Why Does My PreparedStatement Result in a

Sie haben einen Fehler in Ihrer SQL-Syntax, wenn Sie PreparedStatement verwenden.

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);
Nach dem Login kopieren

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";
Nach dem Login kopieren

Verwenden Sie im Java-Code die Methode PreparedStatement#setString, um die benannten Parameter festzulegen:

s.setString("member_id", "2");
s.setString("member_name", "zen");
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage