java
  • sql
  • prepared-statement
  • 2013-01-21 58 views 2 likes 
    2

    我想知道如果使用PreparedStatement.setString()是一個好主意(可能,合理嗎?)動態構建查詢。使用PreparedStatement建立一個查詢

    例如:

    SQL代碼:

    SELECT * FROM table1 WHERE table1.category = ? ? 
    

    java代碼:

    ps.setString(1,"category1"); 
    ps.setString(2,"AND table1.category = 'category2'"); 
    

    此外,纔有可能做這樣的事情:

    ps.setString(1,"category1"); 
    ps.setString(2," AND table1.category = ?"); 
    ps.setString(3,"category2"); 
    

    最佳關於

    +0

    您是否嘗試過運行此代碼?它實際上會起作用嗎? – Andremoniy

    回答

    9

    不幸的是,

    PreparedStatements僅限於值。表名稱和列名稱(以及示例中的條件)是不允許的。所以最好的方法是將它與字符串連接起來。

    String others = " AND table1.category = ?"; 
    String query = "SELECT * FROM table1 WHERE table1.category = ? " + others; 
    

    java代碼:

    ps.setString(1,"category1"); 
    ps.setString(2,"category2"); 
    
    +0

    謝謝,我會這樣做。 – BenoitParis

    +0

    @BenoitParis或直接''查詢=「選擇*從table1 WHERE table1.category =?AND table1.category =?」;' –

    +0

    也根據OP的代碼'AND table1.category =?'將在單引號,所以生成的查詢將沒有意義 –

    3

    無論你把裏面了setString將單引號內去',不會被解釋爲查詢。

    相關問題