- ベストアンサー
sqlに記述できない文字
いつもお世話になっております。 WEB画面から入力された項目を対象にPostgresに検索しに行っているのですが、シングルクォート(')が入っていた場合、エラーになってしまいました。 JavaからSQLを生成し、Postgresに接続しているのですが、シングルクォートを検索させるにはどうするのが良いでしょうか。 またSQLに記述できない文字は、シングルクォートのほかに何かありますでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
下記のページにPostgreSQLのSQLの文字列定数についての説明が有りますので、記述できない文字などについてはここを見ると良いでしょう。 http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS さて、シングルクウォートを含む文字列定数への対応としては下記の3つが考えられます。 1. 文字列中のシングルクウォートとバックスラッシュ(\)を\でエスケープする。 2. ドル引用符を使用する。 3. プレースフォルダを使用する。 2は、$xxxx$ のようなドル記号で囲まれた文字列を引用符代わりに使う、PostgreSQL 独自の機能です。 'hoge' と書く代わりに $xxxx$hoge$xxxx$ の様に書けます。 詳しくは下記のページを見て下さい。 http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING 3は、SQLの定数の位置に?を書き、PreparedStatement の set~~() メソッドを使って値を指定する方法です。下記のページが参考になるでしょう。 http://www.atmarkit.co.jp/fjava/rensai2/webopt11/webopt11.html http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/jdbc/getstart/preparedstatement.html
その他の回答 (1)
- OKwebb
- ベストアンサー率44% (92/208)
> シングルクォートを検索させるにはどうするのが良いでしょうか。 エスケープする。具体的には ''又は\'に。 > SQLに記述できない文字は、シングルクォートのほかに何かありますでしょうか。 どういう風にSQL文を組み立てているかによると思うが、SQLインジェクション対策としては\(円/バックスラッシュ)もした方がよいでしょう。 SQLインジェクション対策については参考URL参照のこと。