Многоотборный месяц из таблицы - sqlite - PullRequest
0 голосов
/ 11 июля 2011

Я получаю 1-й выбранный месяц из JList.Теперь я хотел бы выбрать строки из sqlite DB с выбранными месяцами.

Есть ли способ сделать это простым способом построения строки выбора, например, с помощью цикла и оператора 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 голосов
/ 11 июля 2011

Вы должны использовать предложение IN:

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

Но вам определенно не следует использовать конкатенацию строк для динамической установки параметров в вашем запросе.Это лучший способ пострадать от атак SQL-инъекций.Используйте подготовленные операторы с ? заполнителем для каждого из ваших параметров:

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

Узнайте больше о подготовленных утверждениях в учебнике JDBC .

Вы действительнодолжен использовать какой-то цикл или утилиту для построения предложения IN.StringUtils от commons-lang полезен здесь:

"... AND strftime('%m',Datum) IN (" + StringUtils.repeat("?", ", ", months.size()) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...