java
  • sql
  • user-interface
  • 2015-12-02 36 views 1 likes 
    1

    我正在使用java創建一個GUI以讓用戶從汽車表中搜索。有7個領域可供搜索:VIN,品牌,型號,年份,里程,價格和顏色。用戶可以從一個字段到所有字段中選擇任意組合來搜索汽車。忽略使用Java和SQL的GUI中的空白搜索

    根據其組合的用戶離開空白我使用:

    select * from Cars where color = '"+color+"'" 
    

    select * from Cars where mileage = '"+mileage1+"' and color = '"+color+"' 
    

    但考慮到7場有128種組合。我是否必須實施所有可能的組合?或者當用戶離開一個或多個字段爲空時,SQL可以忽略這種方式嗎?

    回答

    0

    只是contruct你的SQL語句,如果字段填你添加到SQL字符串

    sql = "select * from Cars where" 
        if(field1.text.toString().trim().compareTo("") == 0) sql = sql + field1; 
    


    不要忘記 「和」
    *編輯:從不信任用戶輸入(SQL注入)*

    2
    public class Filter { 
        private final Set<String> fields; 
        private final Map<String, String> search; 
    
        public Filter(String ... fields) { 
         this.fields = new HashSet<>(Arrays.asList(fields)); 
        } 
    
        public void addSearch(String field, String value) { 
         if (field != null && value != null && fields.contains(field)) { 
          search.put(field, value); 
         } 
        } 
    
        public String toSQL() { 
         StringBuilder builder = new StringBuilder(); 
         for (Map.Entry<String, String> entry : search) { 
          String field = entry.getKey(), value = entry.getValue(); 
          if (builder.length() == 0) { 
           builder.append("WHERE "); 
          } else { 
           builder.append("AND "); 
          } 
          builder.append(field).append(" = '").append(value).append("'") 
         } 
         return builder.toString(); 
        } 
    } 
    

    這是一個非常簡單的解決方案,您肯定可以改進。 使用方法如下:

    Filter filter = new Filter("color", "mileage" /* and other columns */); 
    filter.addSearch("color", color); 
    
    String sql = "SELECT * FROM Cars " + filter.toSQL(); 
    

    你或許應該檢查用戶輸入,以防止SQL注入和其他可能的濫用。

    另一個更專業的解決方案是「對象關係映射」,在Java中使用JPA。 Google「JPA」,「Criteria API」,「Hibernate」或「ORM」。

    相關問題