从表中多选月份 - sqlite

时间:2011-07-11 08:51:23

标签: java sql sqlite

我从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'

1 个答案:

答案 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())