1

SQL クエリに問題があります。問題は、企業名の外部データベースにクエリを実行していて、一部の名前が「マーサの」のようになっていることです (アポストロフィを含む)。Android アプリからクエリを実行しているため、クエリ文字列は次のようになります。

String query = "Select * from Advertiser where AdvName= '" + name + "';";

とにかく、クエリのアポストロフィを無視または変更できますか?

前もって感謝します!

4

2 に答える 2

6

これが、パラメーター化されたクエリを実行するときに常に準備済みステートメントを使用する必要がある理由の 1 つです。

String sql = "select * from Advertiser where AdvName = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, name);
ResultSet rs = stmt.executeQuery();

JDBC ドライバーは引用符をエスケープします。これにより、SQL インジェクション攻撃も防止されます。

プリペアド ステートメントには、同じクエリを異なるパラメーターで複数回実行する必要がある場合にも、パフォーマンス上の利点があります。

JDBC チュートリアルで準備済みステートメントの詳細を参照してください。

補足:;クエリの最後に a を付けないでください。

于 2012-07-14T06:14:59.890 に答える
1

PLSQL''では、入力フィールドで double を使用する必要があります。つまり、Martha's => Martha''s:

String query = "Select * from Advertiser where AdvName= 'Martha''s';";


重要な注意事項:
セキュリティ上の理由から (SQL インジェクションを避けるため)、通常の方法でクエリを作成することは避け、準備済みステートメントを使用して、次のようにパラメーターを設定する必要があります。

String query = "Select * from Advertiser where AdvName= ? ";
PreparedStatement  st   = conn.prepareStatement(query);
st.setString(1,name);
于 2012-07-14T06:12:31.340 に答える