java
  • postgresql
  • jdbc
  • 2016-05-12 112 views 0 likes 
    0

    這個問題與Using query_to_xml in PostgreSQL with prepared statements非常相似,但是這裏的解決方案似乎不適用於我的案例。這實際上是一個非常奇怪的情況。我有以下查詢哪些工作正常。JDBC PreparedStatement中的PostgresSQL query_to_xml

    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」 爲詞 「百分比」。我認爲這個問題實際上是因爲它是我傳入查詢的字符串。我還努力將百分比寫入我的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,'');"; 
    

    的SQL文本' and col6 = '''將要在服務器端爲and col6 = '解釋,並''''將被解釋爲',所以你將在字符串的每一邊都有一個引號,這是你告訴內部查詢這是一個字符串所需要的。

    +0

    謝謝@RealSkeptic,這工作的魅力。非常感謝您的解釋。 – tasslebear

    相關問題