-1

ID 番号からユーザーについて取得した変数とテーブル内の値を比較して、データベース内の別のテーブルからテーブルに値を挿入しようとしています。

次のエラーが表示されます。

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Missing semicolon (;) at end of SQL statement.

上記を試すために使用したコードは次のとおりです。

    Statement stmt1 = con.createStatement();

    String mySqlStatement1 = "INSERT INTO Entrant_Group VALUES (Group_Description) WHERE Group_MinAge <= " + details.getAge() + "AND Group_MaxAge >= " + details.getAge() + "AND Group_Gender = 'details.getGender()'";
    stmt1.executeUpdate(mySqlStatement1);
4

1 に答える 1

3

SQL インジェクション攻撃に関する標準的な警告をしばらく脇に置いておきます。ステートメントの問題は、引用符を間違って配置し、ANDs の前にスペースがないことです。

String mySqlStatement1 = "INSERT INTO Entrant_Group VALUES (Group_Description) WHERE Group_MinAge <= "
 +   details.getAge()
 +   " AND Group_MaxAge >= " // Add space
 +   details.getAge()
 +   " AND Group_Gender = '" // Add space
 +   details.getGender()     // This part was enclosed in double-quotes
 +   "';";                   // Add semicolon at the end

インジェクション攻撃を防ぐには、クエリをパラメーター化し、値を準備済みステートメントのパラメーターにバインドする必要があります。

String mySqlStatement1 = "INSERT INTO Entrant_Group VALUES (Group_Description) WHERE Group_MinAge <= ? AND Group_MaxAge >= ? AND Group_Gender = ?;";
于 2013-08-04T11:13:29.777 に答える