com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL構文にエラーがあります。 'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。またはMemberName=? ' 1行目
MySQLは?
の意味を理解していません SQLクエリで。それは確かに無効なSQL構文です。したがって、どういうわけか、PreparedStatement
に置き換えられていません。 。そして、何を推測しますか?
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);
rs = s.executeQuery(query); // Fail!
準備したクエリを元のクエリで上書きしています。引数のないPreparedStatement#executeQuery()
Statement#executeQuery(String)
。
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, intValue);
s.setString(2, strValue);
rs = s.executeQuery(); // OK!
問題とは関係なく、コードがリソースをリークしています。 DBは数時間後にそれらを使い果たし、アプリケーションはクラッシュします。これを修正するには、Connection
を閉じるというJDBCのイディオムに従う必要があります。 、Statement
およびResultSet
finally
try
のブロック それらが取得された場所をブロックします。 JDBC基本チュートリアル
を確認してください。 詳細については。