JDBC PreparedStatement中的PostgreSQL query_to_xml

时间:2016-05-12 13:30:37

标签: java postgresql jdbc

这个问题与Using query_to_xml in PostgreSQL with prepared statements非常相似,但是那里的解决方案似乎并不适用于我的情况。这实际上是一个非常奇怪的情况。我有以下查询工作正常。

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();

但是,如果我向查询添加另一个字符串参数,则会引发错误。例如;

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();

引发以下错误:

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

我已经定义了我的字符串" c"作为单词"百分比"。我认为这个问题实际上是因为它是我传入查询的字符串。我还尝试将单词percent硬编码到我的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 个答案:

答案 0 :(得分:1)

这是查询中的查询。所以它需要在引号内引用。为此,内部引号应加倍

<StackLayout>
    <Image src="res://logo" class="img-logo"/>
</StackLayout>

SQL文字String sql = "select query_to_xml('select col1,col2,col3 FROM table where col4 = '||?||' and col5 = '||?||' and col6 = '''||?||'''', true,true,'');"; 将在服务器端解释为' and col6 = ''',而and col6 = '将被解释为'''',因此您将拥有字符串每一侧的引号,这是为了告诉内部查询这是一个字符串所需要的。