2016-10-07 9 views
0

こんにちはリスト値を使用して行のリストを取得するのに役立つ必要があります。私は文字列のリストを使用して検索クエリを持つことができるかどうか疑問に思っていました。もしそうなら、どのように実装すべきでしょうか?sqliteでList <>を使用して行を選択するandroid

たとえば、私はList<Info>情報の中にこれらの値を持っています。

Jan 10, 2015 Sept 16, 2015 Sept 20, 2015 Oct 20, 2015

は今、私が何をしようとしているリストにそれらの値が含まれているすべての行を取得することです。

例テーブル

Info table 
    --------------------------------------------- 
    id name address  dates 
    --------------------------------------------- 
    1 Test    Sept 16, 2015 
    4 Test    Sept 20, 2015 
    10 Test    Jan 2, 2015 

これは、これは私がこれらの日付を挿入するために使用される方法である行

1 Test 
4 Test 

を取得する必要があります。

public void insertDates(List<LocalDate> dates, String name) { 
     int size = dates.size(); 

     sqLiteDatabase = this.getWritableDatabase(); 
     try { 
      for(int i = 0; i < size; i++) { 
       ContentValues contentValues = new ContentValues(); 
       contentValues.put(KEY_DATE, String.valueOf(duration.get(i).toString("MMMM d, yyyy"))); 
       contentValues.put(KEY_IS_FILTERED, 0); 
       contentValues.put(KEY_NAME, name); 
       sqLiteDatabase.insert(TABLE_INFO, null, contentValues); 
      } 
      sqLiteDatabase.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      sqLiteDatabase.close(); 
     } 

私はこのクエリを持っていますが、ここで

public List<Info> getInfo(String info) { 
     List<Info> getInfoList= new ArrayList<>(); 
     sqLiteDatabase = this.getReadableDatabase(); 
     Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM "+ TABLE_INFO + " WHERE " + KEY_DATES+ " LIKE '%" + info+ "%'", null); 
     cursor.moveToFirst(); 

     while (!cursor.isAfterLast()) { 
      Info info = new Info(); 
      info.setName(cursor.getString(1)); 
      getInfoList.add(info); 
      cursor.moveToNext(); 
     } 
     cursor.close(); 
     return getInfoList; 
    } 
+0

日付が何であるか、また、sqliteの –

+0

にYYYY-MM-dd' 'として保存する必要があります'String info'の値は?このメソッドはどうやって呼びますか?これは 'Info info'変数 –

+0

と一緒には動作しません。どのように情報の値を渡していますか? –

答えて

0

SQLOperationのJavaクラスを作成して入れ、コード吹いた:どこでもあなたのテーブルで検索するには

public class SQLOperations { 

private final SQLiteDatabase db; 

public SQLOperations(Context context) { 
    DatabaseOpenHelper helper = new DatabaseOpenHelper(context); 
    db = helper.getWritableDatabase(); 
} 

public List<String> searchMethod(List<String> datesInput) { 
    List<String> stringList = new ArrayList<>(); 
    int length = datesInput.size(); 
    Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null); 
    int j = 0; 
    for (int i = 0; i < length; i++) { 
     while (cursor.moveToNext()){ 
      String dateTemp = cursor.getString(cursor.getColumnIndex("dates")); 
      if (dateTemp.equals(datesInput.get(i))) { 
       String name = cursor.getString(cursor.getColumnIndex("name")); 
       stringList.add(j, name); 
       j++; 
      } 
     } 
    } 
    return stringList; 
} 
} 

を、このクラスのオブジェクトを取ります。

もちろん

SQLiteOpenHelperクラスを忘れないでください:

public class DatabaseOpenHelper extends SQLiteOpenHelper { 

Context context; 

public DatabaseOpenHelper(Context context) { 
    super(context, SQLConstants.DATABASE_NAME, null, SQLConstants.DATABASE_VERSION); 
    this.context = context; 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(SQLConstants.CREATE_TABLE_NAME); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

} 

}

幸運

1

を働くように見えるdoesntのは提案です:

あなたはミリ秒単位で日付値を格納することができる(Date.getTime()メソッドを使用して)を表のINTEGER列(たとえばdateMS)に挿入します。 dateiMSを検索したい私番目の日付のミリ秒単位の値です

WHERE dateMS in (date1MS, date2MS, date3MS...) 

:次に、あなたのクエリでは、次のWHERE句を使用することができます。

関連する問題