sql >> Databasteknik >  >> RDS >> Mysql

MySQLSyntaxErrorException nära ? när du försöker köra PreparedStatement

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Du har ett fel i din SQL-syntax; kontrollera manualen som motsvarar din MySQL-serverversion för rätt syntax att använda nära '? eller MemberName =?' på rad 1

MySQL förstår inte innebörden av ? i SQL-frågan. Det är verkligen ogiltig SQL-syntax. Så på något sätt har den inte ersatts av PreparedStatement . Och gissa vad?

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(query); // Fail!

Du åsidosätter den förberedda frågan med den ursprungliga frågan! Du måste anropa den argumentlösa PreparedStatement#executeQuery() metod istället för Statement#executeQuery(String) .

PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);        
rs = s.executeQuery(); // OK!

Utan samband med problemet läcker din kod resurser. DB kommer att ta slut efter flera timmar och din applikation kommer att krascha. För att fixa detta måste du följa JDBC-formspråket för att stänga Connection , Statement och ResultSet i finally block av try block där de har förvärvats. Kontrollera JDBC grundläggande självstudier för mer information.



  1. Vad är det maximala antalet tillåtna parametrar per databasleverantörstyp?

  2. PDO förberedde satsen fetch() som returnerar dubbla resultat

  3. Använder setDate i PreparedStatement

  4. OdbcConnection returnerar kinesiska tecken som ?