sql >> データベース >  >> RDS >> Mysql

MySQLSyntaxErrorExceptionの近く? PreparedStatementを実行しようとしたとき

    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基本チュートリアル を確認してください。 詳細については。



    1. MySQLクエリ結果をCSV形式で出力するにはどうすればよいですか?

    2. varcharとnvarcharSQLServerデータ型の主なパフォーマンスの違いは何ですか?

    3. 外部キー制約は、Oracleのクエリ変換に影響を与えますか?

    4. PostgreSQLで最大接続数を増やす方法