com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Du har en fejl i din SQL-syntaks; tjek manualen, der svarer til din MySQL-serverversion for den rigtige syntaks at bruge i nærheden af '? eller MemberName =?' på linje 1
MySQL forstår ikke betydningen af ?
i SQL-forespørgslen. Det er faktisk ugyldig SQL-syntaks. Så på en eller anden måde er det ikke blevet erstattet af PreparedStatement
. Og gæt hvad?
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);
rs = s.executeQuery(query); // Fail!
Du tilsidesætter den forberedte forespørgsel med den oprindelige forespørgsel! Du skal kalde den argumentløse PreparedStatement#executeQuery()
metode i stedet for Statement#executeQuery(String)
.
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);
rs = s.executeQuery(); // OK!
Uden at være relateret til problemet, lækker din kode ressourcer. DB vil løbe tør for dem efter flere timer, og din applikation vil gå ned. For at løse dette skal du følge JDBC-formsproget om at lukke Connection
, Statement
og ResultSet
i finally
blok af try
blok, hvor de er erhvervet. Tjek JDBC grundlæggende selvstudie
for flere detaljer.