Java JDBC, как динамически генерировать запрос с несколькими условиями, в которых

Я новичок в JDBC, в настоящее время я не уверен, как динамически генерировать запрос с несколькими условиями, в которых?

Вот запрос с использованием JDBC с одним условием:

SELECT 
    sp.*, se.sepurch_email, issuppno, isstates
FROM supplier sp
LEFT JOIN suppliser_email se ON spsuppno = sesuppno AND spstate = sestate 
LEFT JOIN int_supplier ON spsuppno = issuppno AND islive = 'Y'
WHERE 
   spsuppno = : SUPPLIER_NUMBER_PARAM AND spstate = : SUPPLIER_STATE_CODE_PARAM;

Теперь у меня есть запрос со списком (SUPPLIER_NUMBER_PARAM, SUPPLIER_STATE_CODE_PARAM)

Как я могу преобразовать запрос в формат динамически, как показано ниже, потому что я не знаю, сколько в списке запросов:

WHERE 
  (spsuppno = 1000 AND spstate = 'vic') 
  OR 
  (spsuppno = 2000 AND spstate = 'NSW')

Большое спасибо!

Не похоже, что вы пытались что-то делать самостоятельно. Другой человек мог проголосовать против по какой-то другой причине, но мой голос определенно из-за этого.

M. Prokhorov 30.05.2018 14:24

@ М.Прохоров, откуда ты знаешь, что я этого не делал ?? насмешки

J.L 30.05.2018 14:25

@ М.Прохоров сб

J.L 30.05.2018 14:26

Потому что вы не показываете попытки.

M. Prokhorov 30.05.2018 14:26

У вас не так много вариантов. Вам нужно будет составить запрос самостоятельно.

Kayaman 30.05.2018 14:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
1 229
2

Ответы 2

Вы можете попробовать что-то похожее на то, что я использовал некоторое время назад

public List<Book> findAllFiltered(String title, String genre, String author) {
        Connection connection = jdbConnectionWrapper.getConnection();
        List<Book> books = new ArrayList<>();
        try {
            String query = "SELECT * FROM book";
            if (!StringUtils.isNullOrEmpty(title) ||
                    !StringUtils.isNullOrEmpty(genre) ||
                    !StringUtils.isNullOrEmpty(author)) {
                query = query + " WHERE";
            }

            if (!StringUtils.isNullOrEmpty(title)) {
                query = query + " title LIKE '%" + title + "%'";
            }

            if (!StringUtils.isNullOrEmpty(genre)) {
                if (!StringUtils.isNullOrEmpty(title)) {
                    query = query + " AND";
                }
                query = query + " genre LIKE '%" + genre + "%'";
            }

            if (!StringUtils.isNullOrEmpty(author)) {
                if (!StringUtils.isNullOrEmpty(title) ||
                        !StringUtils.isNullOrEmpty(genre)) {
                    query = query + " AND";
                }
                query = query + " author LIKE '%" + author + "%'";
            }

            System.out.println(query);
            PreparedStatement preparedStatement = connection.prepareStatement(query);

            //some extra code here for retrieveing data

Пожалуйста, используйте статью по ссылке из oracle в заявлении подготовки JDBC. https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

Там есть пример того, как вы можете заставить это работать

или обратитесь к

передача параметров в JDBC PreparedStatement

Другие вопросы по теме