java
  • sql
  • sqlite
  • 2011-07-11 37 views 0 likes 
    0

    我從JList中選出1-n個月。 現在我想選擇具有選定月份的sqlite數據庫中的行。從表中選擇多月 - sqlite

    有沒有辦法做到這一點簡單的方法來建立選擇字符串,例如用循環和LIKE語句?

    resultSet = statement 
         .executeQuery("SELECT sum(Betrag) FROM record WHERE strftime('%Y',Datum)='" 
          + options.getList_years().get(options.getCurrent_year_index()) 
          + "' AND strftime('%m',Datum) LIKE '" 
          + "02 || 04 || 12" //Here are the months, 
          + "' AND Sektion LIKE '" 
          + "%" 
          + "' AND Inhaber LIKE '" 
          + list_accounts.getSelectedValue() 
          + "' AND Ausgabe='" 
          + "true';"); 
    

    還是這樣看待?

    strftime('%m',Datum)='02' OR strftime('%m',Datum)='04' OR trftime('%m',Datum)='12' 
    

    回答

    0

    您應該使用IN子句:

    ... AND strftime('%m',Datum) IN ('02', '04', '12') 
    

    但你絕對不應該使用字符串連接到查詢動態地設置參數。這是遭受SQL注入攻擊的最佳方式。使用準備好的語句,用?佔位符爲每個參數:

    SELECT sum(Betrag) FROM record WHERE strftime('%Y',Datum) = ? ... 
    

    瞭解更多關於準備好的發言中the JDBC tutorial

    您確實必須使用一些循環或實用程序來構建IN子句。 StringUtils從公地郎在這裏很有用:

    "... AND strftime('%m',Datum) IN (" + StringUtils.repeat("?", ", ", months.size()) 
    
    +0

    謝謝,我會看看 –

    +0

    謝謝...工作 –

    相關問題