我有一個Book表,它由"Title", "Genre", "Author" and "PageNumber"
列組成,我也有一個searchBook(String title, String author, String Genre)
方法來搜索書籍。我正在從用戶中檢索這些參數,因此其中一個或多個參數可能爲空,但我仍然想通過使用其餘參數進行搜索。我可以寫所有可能的情況下(例如if(title.equals("") && !author.equals("") && !genre.equals(""))
但這似乎愚蠢對我來說是有一個簡短的方式來做到這一點Java mySQL multiple where Where子句
-2
A
回答
0
這是建立一個PreparedStatement
查詢(因此?
佔位符),只有可用的值的例子,那麼procedes更換值並執行查詢:
private void searchBook(final String title, final String author, final String Genre) {
Map<String, String> validParams = new HashMap<String, String>();
if (!title.equals("")) {
validParams.put("title", title);
}
if (!author.equals("")) {
validParams.put("author", author);
}
if (!Genre.equals("")) {
validParams.put("genre", Genre);
}
if(validParams.isEmpty()){
// if no value is correct, return
return;
}
StringBuilder queryBuilder = new StringBuilder();
queryBuilder.append("SELECT name from BOOK ");
boolean queryBuildStarted = false ;
for(String key : validParams.keySet()){
if(!queryBuildStarted){
queryBuilder.append(" WHERE ");
queryBuildStarted = true;
}
else{
queryBuilder.append(" AND ");
}
queryBuilder.append(key+" = ?");
}
PreparedStatement statement = connection.prepareStatement(queryBuilder.toString());
int index = 1;
for(String key : validParams.keySet()){
statement.setString(index, validParams.get(key));
index ++;
}
ResultSet rs = statement.executeQuery();
// do stuff
}
0
,你可以像這樣的查詢拆分的東西:?
String query= "SELECT * FROM table WHERE 1=1 ";
if(!title.equals("")){
query += " AND title=?";
}
if(!author.equals("")){
query += " AND author=?";
}
等。 ..
0
如果你有完全的控制權,那麼你不應該使用空參數調用這個方法,而應該使用方法重載,也可以使用你自己的Builder或Criteria模式構造一個只有非空值的查詢。
您也可以構建是會選擇一切,當一個參數是空的查詢,例如:
SELECT * FROM Books WHERE title = IFNULL("something", title) AND author = IFNULL(null, author) AND genre = IFNULL(null, genre)
這意味着,在您的參數爲null,這會是與列的名稱所取代,從而選擇一切,如果它不是空(如我的例子中的標題),它只是要拿這個標題。我不建議這個解決方案,這是糟糕的性能。
相關問題
- 1. MySQL Multiple Select,Where Where子句
- 2. LINQ multiple where子句
- 3. multiple where子句php
- 4. SQL Select for multiple where子句
- 5. SQL Insert with multiple where子句
- 6. MYSQL multiple where
- 7. MySQL加入where where子句
- 8. mySQL multiple和WHERE語句中的比較
- 9. MYSQL MIN WHERE子句
- 10. mysql的where子句
- 11. Loopback multiple where子句客戶端
- 12. SQL Oracle Rownum on multiple where子句?
- 13. 如何在單個mysql select語句中使用Multiple where子句?
- 14. EntityDataSource Where Where子句
- 15. mysql where where子句不返回空?
- 16. MySQL Double Join with Multiple Where Clauses
- 17. nodejs mysql multiple where查詢的
- 18. 在MySQL使用Java變量where子句
- 19. 在WHERE子句
- 20. Laravel multiple where where has has callback
- 21. gridview display + multiple where where clause
- 22. Linq Lambda Where子句在where子句中
- 23. Mysql全文搜索:要where子句,還是不要where子句?
- 24. MYSQL如何取消或無效WHERE子句中的WHERE子句
- 25. MySql更新查詢沒有where子句vs與where子句
- 26. mysql如何在where子句
- 27. MySQL如果在Where子句
- 28. 調試MySQL WHERE子句
- 29. MySQL的:SUM WHERE子句中
- 30. Mysql的在WHERE子句
您可以構建查詢以編程方式,省略值爲'null'或空的條款。 – Berger
你能舉個簡單的例子嗎? –