0

SQLクエリを実行するための次のコードがあります。

query = String.format("select * from users where user_name = '%s';", results.getString(1));
results2 = mStmt.executeQuery(query);

データセット内の1つのuser_nameの値は「O'brien」です。これは、「O'brien」の括弧が1つであるため、クエリを台無しにします。クエリは次のようになります。

select * from users where user_name = 'O'brien'

これを克服し、データを変更しないための戦略は何ですか?

編集:プリペアドステートメントは一重引用符の問題を修正しますが、それは問題の一部にすぎませんでした。私が持っている文字列値の1つに、「UNDER」という単語が含まれています。これはSQLキーワードです。たとえば、次のクエリを使用して、insertAllというpreparedStatementがあります。

insert into names (id, val1, val2, val3, val4, tTime, val5) values (?, ?, ?, ?, ?, ?, ?)

すべての助けをありがとう!

4

2 に答える 2

5

パラメータを prepareStatement で設定します。あなたのコードは、本からの SQL インジェクションの悪用可能なコードです。 http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

于 2012-11-30T04:14:05.347 に答える
1

代わりにPreparedStatementを使用しないのはなぜですか?

これは次のようになります (申し訳ありませんが、実際には実行していませんが、アイデアは得られるはずです)。

query = "select * from users where user_name = ?";
PreparedStatement p = new PreparedStatement(con, query);
p.setString(1, results.getString(1));
results2 = p.executeQuery();
于 2012-11-30T04:19:02.527 に答える