Java JDBC, как динамически генерировать запрос с несколькими условиями, где - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в 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')

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

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

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

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

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

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

0 голосов
/ 30 мая 2018

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

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
...