Java JDBC如何在多个条件下动态生成查询

时间:2018-05-30 12:15:40

标签: java jdbc spring-jdbc jdbctemplate

我是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 :(得分:0)

你可以尝试类似于我以前用过的东西

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

答案 1 :(得分:0)

请在JDBC prepare语句中使用oracle链接中的文章 https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

有一个关于如何使其发挥作用的例子

或参考

passing parameters to a JDBC PreparedStatement