Mysql
 sql >> Database >  >> RDS >> Mysql

MySQLSyntaxErrorException vicino a ? quando si tenta di eseguire PreparedStatement

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:si è verificato un errore nella sintassi SQL; controlla il manuale che corrisponde alla versione del tuo server MySQL per la sintassi corretta da usare vicino a '? o NomeMembro =?' alla riga 1

MySQL non comprende il significato di ? nella query SQL. È davvero una sintassi SQL non valida. Quindi in qualche modo non è stato sostituito da PreparedStatement . E indovina un po'?

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

Stai sovrascrivendo la query preparata con la query originale! È necessario chiamare l'argomento PreparedStatement#executeQuery() metodo invece di Statement#executeQuery(String) .

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

Non correlato al problema, il tuo codice perde risorse. Il DB si esaurirà dopo diverse ore e l'applicazione andrà in crash. Per risolvere questo problema, devi seguire l'idioma JDBC di chiusura di Connection , Statement e ResultSet nel finally blocco del try blocco in cui sono stati acquisiti. Consulta il esercitazione di base JDBC per maggiori dettagli.