Как создать динамический запрос с использованием EOD SQL? - PullRequest
0 голосов
/ 13 октября 2009

Это должно быть довольно просто, хотя я не могу найти ни одного примера. Я хочу создать запрос, похожий на этот:

SELECT column_name FROM table_name WHERE column_name IN (value1,value2,...)

Как вариант, я могу добавить OR-предложения в конец запроса.

Код, который я написал до сих пор, взрывается с помощью Nullpointer:

@Select(sql = "select storename from broadcastrecipient where storecity in (?{1})")
public List<String> getStoresForCities(List<String> theCities) throws SQLException;

Заранее спасибо. // Abean

ПРИМЕЧАНИЕ. Я забыл добавить информацию о моем env: PostGres 8.3, Java 1.6 и EOD SQL 0.9.


Спасибо, Джейсон. Для тех, кто любит знать, запрос выглядит примерно так:

    @Select(sql = "select distinct(storename) from broadcastrecipient where storecity = any (?{1})", disconnected=true)
    public List<String> getStoresForCities(String[] theCities) throws SQLException;

И мне также нужно было реализовать класс TypeMapper для сопоставления массива SQL с массивом Java.

1 Ответ

1 голос
/ 14 октября 2009

Я бы посоветовал взглянуть на EoD SQL 2.0: https://eodsql.dev.java.net/ Затем взгляните на метод QueryTool.select (), который предназначен именно для этой ситуации.

EoD SQL 0.9 не имеет функциональных возможностей для обработки встроенного запроса такого типа.

Действительно уродливый хак - это создать временную таблицу и заполнить ее данными вашего массива. Затем выполните запрос как:

@Select("SELECT storename FROM broadcastrecipient WHERE storecity IN (SELECT * FROM tmp_cities)")
public List<String> getStoresForCurrentCities();
...