我从JList获得1个月的选定月份。 现在我想从选定月份的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 :(得分:0)
您应该使用IN子句:
... AND strftime('%m',Datum) IN ('02', '04', '12')
但是你绝对不应该使用字符串连接来在查询中动态设置参数。这是遭受SQL注入攻击的最佳方法。使用预备语句,每个参数都有一个?
占位符:
SELECT sum(Betrag) FROM record WHERE strftime('%Y',Datum) = ? ...
详细了解the JDBC tutorial中准备好的陈述。
您确实必须使用一些循环或实用程序来构建IN子句。来自commons-lang的StringUtils
在这里很有用:
"... AND strftime('%m',Datum) IN (" + StringUtils.repeat("?", ", ", months.size())