2017-08-09 11 views
-1

1つの列で5つの単語を同時に検索する必要があります。 5つの単語すべてが列に存在する必要があります。私のコードでは、最初の単語だけが検索されています。私は "listOfWords"をループして、ループをクエリに渡す必要があることを理解しています。誰かがこれを行う方法の例を持っていますか?私の試み:1つのクエリで5単語のSqLite検索

 String query = "SELECT 1 FROM sowpods WHERE field1 IN " + listOfWords; 
    Cursor cursor = db.rawQuery(query, null); 

    if (cursor.moveToFirst()) { 
     for (int i = 0; i < listOfWords.length(); i++) { 
      do { 
       Toast.makeText(this, "Word exists!", Toast.LENGTH_SHORT).show(); 

      } while (cursor.moveToNext()); 
     } 
    } else { 
     Toast.makeText(this, "Word does not exist", Toast.LENGTH_SHORT).show(); 
     cursor.close(); 
     db.close(); 
    } 
    cursor.close(); 
    db.close(); 
} 

UPDATE: 現時点では、私の作品唯一の事はこれです:

 String query = "SELECT 1 FROM sowpods WHERE field1 LIKE 'dojfdgkhdg'"; 
    Cursor cursor = db.rawQuery(query, null); 
    if (cursor.moveToFirst()) { 
     Toast.makeText(this, "Yay!", Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(this, "No, don't exist!", Toast.LENGTH_SHORT).show(); 
    } 

    String query2 = "SELECT 1 FROM sowpods WHERE field1 LIKE 'cat'"; 
    Cursor cursor2 = db.rawQuery(query2, null); 
    if (cursor2.moveToFirst()) { 
     Toast.makeText(this, "Yay!", Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(this, "No, don't exist!", Toast.LENGTH_SHORT).show(); 
    } 

    String query3 = "SELECT 1 FROM sowpods WHERE field1 LIKE 'dog'"; 
    Cursor cursor3 = db.rawQuery(query3, null); 
    if (cursor3.moveToFirst()) { 
     Toast.makeText(this, "Yay!", Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(this, "No, don't exist!", Toast.LENGTH_SHORT).show(); 
    } 

それはAが必要です1.しかし、それは正しく表示されません多くの反復コード、2.私は、複数のカーソルを持つことがリソースの非常に効率的な使用であるとは確信していません。 私は信じられないほどいくつかの指摘に感謝します。乾杯!

新しい更新

私は今のだところである:

Cursor cursor = db.query(true, "sowpods", new String[]{"field1"}, "field1 IN (?)", new String[]{" 'dog', 'cat', 'horse', 'cow'"}, null, null, null, null); 

     if (cursor.moveToFirst()) { 
      do { 
       cursor.moveToNext(); 
       Toast.makeText(this, "Word 1 exists", Toast.LENGTH_SHORT).show(); 
       cursor.moveToNext(); 
       Toast.makeText(this, "Word 2 exists", Toast.LENGTH_SHORT).show(); 
       cursor.moveToNext(); 
       Toast.makeText(this, "Word 3 exists", Toast.LENGTH_SHORT).show(); 
       cursor.moveToNext(); 
       Toast.makeText(this, "Word 4 exists", Toast.LENGTH_SHORT).show(); 
      } while (cursor.moveToNext()); 
     } 
     return cursor; 
    } 

これは何を返していないので、任意のヘルプは歓迎されるであろう。

答えて

0

あなたはすべての単語が含まれています列を検索したい場合は、このクエリに

SELECT 1FROM sowpods 
    WHERE field1 LIKE '%word1%' 
    OR field1 LIKE '%word2%' 
    OR field1 LIKE '%word3%' 

を使用し、あなたのリストからすべての作業が含まれます列を検索したい場合は

SELECT 1FROM sowpods 
    WHERE field1 LIKE '%word1%' 
    AND field1 LIKE '%word2%' 
    AND field1 LIKE '%word3%' 

あなたの列の文字列を検索する場合は、部分文字列としても特定のものとしても使用できます。

SELECT 1 FROM sowpods 
    WHERE CHARINDEX('word1', field1) > 0 
    OR CHARINDEX('word2', field1) > 0 
    OR CHARINDEX('word3', field1) > 0 

この

SELECT 1 FROM sowpods 
    WHERE CHARINDEX('word1', field1) > 0 
    AND CHARINDEX('word2', field1) > 0 
    AND CHARINDEX('word3', field1) > 0 
+0

を使用しすぎて、その後のサブストリングと特定など、すべての作業が含まれているカラム文字列を検索するには感謝をしたい場合は、これは有望に見えるが、私は部分文字列の中に私の「listOfWords」を分割する必要があります。私はそれをして、あなたに戻ってきます。再度、感謝します。 –

+0

こんにちは、私はオプション3を試しましたが、エラーが出ます:CHARINDEX、そのような機能はありません。私もオプション2を試しましたが、5つの単語がすべてデータベースに入っていてもWordは存在しません。 –

関連する問題