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

java.sql.SQLExceptionパラメータインデックスが範囲外です(1>パラメータの数。0)

    setXxx()のいずれかを呼び出すと、このエラーが発生します PreparedStatementのメソッド 、SQLクエリ文字列にはプレースホルダーがありません? このために。

    たとえば、これは間違っています

    String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (val1, val2, val3)";
    // ...
    
    preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setString(1, val1); // Fail.
    preparedStatement.setString(2, val2);
    preparedStatement.setString(3, val3);
    

    プレースホルダーを指定するには、それに応じてSQLクエリ文字列を修正する必要があります。

    String sql = "INSERT INTO tablename (col1, col2, col3) VALUES (?, ?, ?)";
    // ...
    
    preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setString(1, val1);
    preparedStatement.setString(2, val2);
    preparedStatement.setString(3, val3);
    

    パラメータインデックスは1で始まることに注意してください そして、あなたはしない そのようにそれらのプレースホルダーを引用する必要があります:

    String sql = "INSERT INTO tablename (col1, col2, col3) VALUES ('?', '?', '?')";
    

    そうしないと、SQLパーサーがそれらを実際の文字列値として解釈し、プレースホルダーを見つけることができなくなるため、同じ例外が発生します。

    関連項目:



    1. SQLでテーブルに列を追加する方法は?

    2. PostgreSQLに最適なアラートおよび通知ツール

    3. 1つのステートメントでシーケンスから複数のNEXTVALを照会します

    4. PostgreSQL + Hibernate+Spring自動作成データベース