0

データベースにデータを挿入する Java アプリケーションを作成しようとしています。アプリケーションはかなり簡単です。ユーザーから 3 つの入力を受け取り、その入力をデータベースに挿入します。すべてが機能していますが、挿入ステートメントを実行するとSQLエラーが発生します。これがコードスニペットです。

sa.executeUpdate("INSERT INTO history (to, subject, body)"+"VALUES("+ DATA1 + "','" + DATA2 + "','" +DATA3+ "')'");

ステートメントの二重引用符と単一引用符に問題があると確信しています。

4

4 に答える 4

6

PreparedStatementこの種のものには常に s を使用する必要があります。引用を処理し、SQL インジェクション攻撃から保護します。

PreparedStatement statement = connection.prepareStatement("INSERT INTO history (to, subject, body) VALUES (?, ?, ?)");
statement.setString(1, DATA1);
statement.setString(2, DATA2);
statement.setString(3, DATA3);
statement.execute();

それだけでなく、データベース ドライバーはプリペアド ステートメントをコンパイルしてキャッシュできるため、ステートメントがはるかに効率的になる可能性があります。

setStringインデックスはゼロベースではなく、1 ベースであることに注意してください。

于 2012-09-28T04:50:28.320 に答える
1
sa.executeUpdate("INSERT INTO history (to, subject, body)"+"VALUES("+ DATA1 + "','" + DATA2 + "','" +DATA3+ "')'");

このコードは、次のようなクエリを生成します。

INSERT INTO history (to, subject, body)VALUES(vinesh','raja','1111')'

最後の ')' の後の単一引用符を削除し、'VALUES' の後に単一引用符を追加する必要があります。

代わりに、次のコードを試してください。

sa.executeUpdate("INSERT INTO history (to, subject, body)"+"VALUES('"+ DATA1 + "','" + DATA2 + "','" +DATA3+ "')");
于 2012-09-28T04:28:15.910 に答える
0

Vinesh が解決策を提案したように、私は単純に言いたいのですが、1 つの変数を

String query="SQL QUERY";
then just do System.out.println(query);

次に、ラインを実行します。

PreparedStatement statement = connection.prepareStatement(query)

そのため、形成された最終的なクエリを正しく識別できます。

于 2012-09-28T04:57:12.673 に答える
-1

1. String クラスを使用する代わりに、変更可能なクラスである String Buffer または String Builder を使用します。一方、String クラスはイミュータブルです。次のような文字列バッファを使用できます

  1. String Buffer stbuffer = new String Buffer();

    stbuffer.append("insert into ");
    stbuffer.append("<tablename> ");
    stbuffer.append("<fields >");
    stbuffer.append(" values");
    stbuffer.append("(+");
    stbuffer.append(String);
    stbuffer.append(")");  ....etc
    
  2. を使用して最終的な文字列表現を取得できますstbufffer.toString();

  3. このタイプのクエリを挿入して、次のupdate()ようなメソッドを実行できますins.executeUpdate(stbuffer.toString);

  4. このように Insert ステートメントや Prepared Statement にも使用できます

于 2012-09-28T05:22:43.487 に答える