質問: sqlに記述できない文字 いつもお世話になっております。 web画面から入力された項目を対象にpostgresに検索しに行っているのですが、シングルクォート(')が入っていた場合、エラーになってしまいました。 javaからsqlを生成し、postgresに接続しているのですが、シングルクォートを検索させるにはどうするのが良いでしょうか。 またsqlに記述できない文字は、シングルクォートのほかに何かありますでしょうか。 よろしくお願いします。
回答: 下記のページに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 参考url:http://www.postgresql.jp/document/pg837doc/html/sql-syntax-lexical.html#sql-syntax-constants