2015-04-18 36 views
0

我正在使用搜索功能,並將搜索查詢分割爲單獨的單詞。我知道不會超過10個字,但可能會少一些。有沒有一種方法可以使分割函數具有一致的結果?(相同的字數)

因爲我需要做的SQL查詢,用單詞的一致量,讓我們說10,我需要添加輸入的情況下,用戶8點空的話只有2

有沒有什麼聰明的方法怎麼辦呢或者我應該從1到10循環,並檢查該特定位置是否爲空,如果是,則用空白字填充它?

SQL查詢將看起來像這樣(但有9個AND):

SELECT * FROM mytable 
WHERE column1 LIKE '%word1%' 
AND column1 LIKE '%word2%' 
AND column1 LIKE '%word3%' 

基本上就是我想要做的就是這一點,但也許在一些更聰明的辦法:

String[] finalSearch = new String[10]; 
    String[] search=searchInput.split(" ", -1); 

    for (int i=0; i<10; i++){ 
     if (search[i]!=null){ 
      finalSearch[i] = search[i]; 
     }else{ 
      finalSearch[i]=""; 
     } 
    } 
+0

如何您的SQL查詢樣子? –

+0

'因爲我需要使用一致的單詞數量來進行SQL查詢 - 這是強制性的嗎?如果用戶只輸入2個單詞,你不能只在SQL查詢中發送2個參數嗎? – Arkantos

+1

它是SQL查詢中的「AND」還是「OR」?你總是搜索同一列嗎?如果'column1'匹配'word1',你是否還需要在同一個'column1'中搜索'word2'? – Arkantos

回答

1

您可以生成查詢依賴於用戶輸入這樣的:

static String getQuery(String ... userInput){ 
     StringBuilder sb=new StringBuilder("SELECT * FROM mytable"); 
     if (userInput.length>0){ 
      sb.append(" where"); 
      for (int i=0;i<userInput.length;i++){ 
       sb.append(" column1 LIKE '%"+userInput[i]+"%'"); 
       if (i!=userInput.length-1) sb.append(" AND"); 
      } 
     } 
     sb.append(";"); 
     return sb.toString(); 
    } 
+0

比我的更好的解決方案,我現在感覺非常愚蠢......非常感謝。 –

1

比方說,你有要搜索項目列表:

// List<String> terms 
StringBuilder sqlQuery = new StringBuilder("SELECT * FROM mytable "); 

if (terms.isEmpty()) { throw new IllegalArgumentException("SOME DESCRIPTION HERE") } 
sqlQuery.append("WHERE column1 LIKE ? "); 
for (int i = 1; i < terms.length(), i++) { 
    sqlQuery.append("AND column1 LIKE ? "); 
} 

PreparedStatement preparedStatement = null; 
Connection connection = null; 

try { 
    // Get your JDBC connection as usual 
    // connection = getJdbcConnection(); 
    preparedStatement = connection.prepareStatement(sqlQuery.toString()); 

    for (int i = 0; i < terms.length(), i++) { 
    preparedStatement.setString(i + 1, "%" + terms[i] + "%"); 
    } 
} catch (SQLException e) { 
    // Do something here with he exception 
} finally { 
    // Make sure you close JDBC resources here 
} 
+0

你有我的+1,謝謝,好主意。 –

0

而不必單詞的固定數量(10),你可以把它打造出您需要的話查詢的?

你能不能做這樣的事情:

String [] words = search.split(); 
query = "SELECT * FROM my table WHERE"; 
for (int i = 0; i < words.length; i++){ 
    query += "columns LIKE " + words[i]; 
    If (i < words.length - 1) 
     query += "AND"; 
} 
相關問題