2016-05-12 5 views
0

この質問は、Using query_to_xml in PostgreSQL with prepared statementsと非常によく似ていますが、そこの解決策は私の場合は機能していないようです。実際には非常に奇妙な状況です。私はうまく動作する次のクエリがあります。JDBCのPostgresSQL query_to_xml PreparedStatement

String sql = "select query_to_xml('select col1,col2,col3 FROM table where col4 = '||?||' and col5 = '||?||'', true,true,'');"; 

と準備文のように:私は、クエリに別の文字列パラメータを追加する場合

PreparedStatement ps0 = conn.prepareStatement(sql); 
ps0.setInt(1, a); 
ps0.setInt(2, b); 
ResultSet rs0 = ps0.executeQuery(); 

は、しかし、それはエラーをスローします。例えば;私は言葉 "パーセント" としての私の文字列 "c" を定義していた

org.postgresql.util.PSQLException: ERROR: column "percent" does not exist 

String sql = "select query_to_xml('select col1,col2,col3 FROM table where col4 = '||?||' and col5 = '||?||' and col6 = '||?||'', true,true,'');"; 

PreparedStatement ps0 = conn.prepareStatement(sql); 
ps0.setInt(1, a); 
ps0.setInt(2, b); 
ps0.setString(3, c); 
ResultSet rs0 = ps0.executeQuery(); 

は、次のエラーをスローします。この問題は実際にはクエリに渡す文字列なので、私は仮定します。私はまた、単語%をwhere句にコーディングして、それを準備文のパラメータとして次のようには含まないようにしました。

String sql = "select query_to_xml('select col1,col2,col3 FROM table where col4 = '||?||' and col5 = '||?||' and col6 = 'percent'', true,true,'');"; 

ただし、代わりに次のエラーが発生します。私は解決策を推測している

org.postgresql.util.PSQLException: ERROR: syntax error at or near "percent" 

は、おそらくダウン追加または削除する必要があり、単一または二重引用符のどこかにあるが、私はそれを見ているようだ傾けます。すべてのポインタは、ありがとう、ありがとう。

答えて

1

クエリ内のクエリです。したがって、引用符を引用符で囲む必要があります。そして、このために仕事に、内部引用符がを倍増する必要があります。

String sql = "select query_to_xml('select col1,col2,col3 FROM table where col4 = '||?||' and col5 = '||?||' and col6 = '''||?||'''', true,true,'');"; 

あなたは、このように、リテラル' and col6 = ''' SQLがand col6 = 'としてサーバ側で解釈されようとしている、と'''''として解釈されようとしていますこれは文字列であることを内部クエリに伝えるために必要な、文字列の両側に引用符を付けます。

+0

ありがとう@RealSkeptic、それは魅力的でした。説明もありがとうございました。 – tasslebear

関連する問題