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

MySQLSyntaxErrorException i nærheden af ​​? når du forsøger at udføre PreparedStatement

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.



  1. Opdatering af Salesforce fra Oracle®

  2. Indstilling af sessionens tidszone med spring jdbc oracle

  3. Find overlappende datointervaller i PostgreSQL

  4. Pgbackrest Gendan og gendan Delta