我是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')
非常感谢!
答案 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
有一个关于如何使其发挥作用的例子
或参考