2016-11-10 104 views
-1

我下一個變量在我的Java代碼Java和MySQL的 - 變量和循環

vNumber = 7 
vOrder = 1 
vDateFrom = 1.1.2015 
vDateTo = 1.1.2016 

我需要瞬移到MySQL數據庫並獲取查詢返回的結果

select * from myTable 
where number = vNumber 
and order = vOrder 
and dateFrom = vDateFrom 
and dateTo = vDateTo 

的問題是,如果我沒有輸入這樣的一些變量

vNumber = '' 
vOrder = 1 
vDateFrom = 1.1.2015 
vDateTo = 1.1.2016 

我需要查詢不要變量vNumber

select * from myTable 
where order = vOrder 
and dateFrom = vDateFrom 
and dateTo = vDateTo 

如果vNumber和vOrder未輸入查詢子句中的返回值,則不需要考慮vNiumber和vOrder ...以及所有變量的組合。

如何創建查詢,如果我沒有價值的一些變量?

有什麼想法?

+0

問題是什麼? – Shadow

回答

2

如果每個參數不是空白,然後將其添加到where子句,則可以對每個參數進行簡單檢查。 在java中是這樣的:

Map<String, String> parameters = new HashMap<>(); 
    if (StringUtils.isNoneBlank(vNumber)) { 
     parameters.put("number", vNumber); 
    } 
    if (StringUtils.isNoneBlank(vOrder)) { 
     parameters.put("order", vOrder); 
    } 
    if (StringUtils.isNoneBlank(vDateFrom)) { 
     parameters.put("dataFrom", vDateFrom); 
    } 
    if (StringUtils.isNoneBlank(vDateTo)) { 
     parameters.put("dateTo", vDateTo); 
    } 
    StringBuilder sqlQuery = new StringBuilder("select * from myTable "); 
    if (parameters.size() > 0) { 
     sqlQuery.append(" where "); 
     for (String paramName : parameters.keySet()) { 
      sqlQuery.append(paramName).append("=").append(parameters.get(paramName)); 
     } 
    } 
    //this will return your query 
    sqlQuery.toString();   

但是當你正在使用Java來訪問SQL最好的方法是使用準備好的語句,然後執行查詢:https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html

+0

不客氣:) –