プロが教えるわが家の防犯対策術!

いつもお世話になっております。
WEB画面から入力された項目を対象にPostgresに検索しに行っているのですが、シングルクォート(')が入っていた場合、エラーになってしまいました。

JavaからSQLを生成し、Postgresに接続しているのですが、シングルクォートを検索させるにはどうするのが良いでしょうか。

またSQLに記述できない文字は、シングルクォートのほかに何かありますでしょうか。

よろしくお願いします。

A 回答 (2件)

下記のページにPostgreSQLのSQLの文字列定数についての説明が有りますので、記述できない文字などについてはここを見ると良いでしょう。


http://www.postgresql.jp/document/pg837doc/html/ …

さて、シングルクウォートを含む文字列定数への対応としては下記の3つが考えられます。
1. 文字列中のシングルクウォートとバックスラッシュ(\)を\でエスケープする。
2. ドル引用符を使用する。
3. プレースフォルダを使用する。


2は、$xxxx$ のようなドル記号で囲まれた文字列を引用符代わりに使う、PostgreSQL 独自の機能です。
'hoge' と書く代わりに $xxxx$hoge$xxxx$ の様に書けます。
詳しくは下記のページを見て下さい。
http://www.postgresql.jp/document/pg837doc/html/ …

3は、SQLの定数の位置に?を書き、PreparedStatement の set~~() メソッドを使って値を指定する方法です。下記のページが参考になるでしょう。
http://www.atmarkit.co.jp/fjava/rensai2/webopt11 …
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ …

参考URL:http://www.postgresql.jp/document/pg837doc/html/ …
    • good
    • 1

> シングルクォートを検索させるにはどうするのが良いでしょうか。


エスケープする。具体的には
''又は\'に。
> SQLに記述できない文字は、シングルクォートのほかに何かありますでしょうか。
どういう風にSQL文を組み立てているかによると思うが、SQLインジェクション対策としては\(円/バックスラッシュ)もした方がよいでしょう。
SQLインジェクション対策については参考URL参照のこと。

参考URL:http://www.tokumaru.org/d/20080601.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A