2011-07-11 17 views
0

JListから選択された月が1-nになりました。 これで、選択した月のsqlite DBから行を選択したいと思います。テーブルからの複数選択月 - 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句を作成するには、ループまたはユーティリティを使用する必要があります。コモンズ-LANGからStringUtilsはここに便利です:

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

おかげで、私は、おかげで...働く見 –

+0

がかかります –

関連する問題