2017-08-20 8 views
0

(日付列がある:[searchDate] DATETIMEデフォルトのCURRENT_TIMESTAMP、)この写真で日付フィルタを使用してSQLiteからいくつかのデータを選択しますか?私は日付でフィルタを使用してデータベーステーブルからいくつかのデータを選択したい

、私はSQLiteの専門家や日付別のフィルタを使用しています: enter image description here

と、このコード現在の年と月を取得するためのものです:

DateFormat YEAR_FORMAT = new SimpleDateFormat("yyyy"); 
     DateFormat MONTH_FORMAT = new SimpleDateFormat("MM"); 
     YEAR_DATE = YEAR_FORMAT.format(new Date()); 
     MONTH_DATE = MONTH_FORMAT.format(new Date()); 
     Date date = new Date(); 
     Log.d("Month", YEAR_FORMAT.format(date) + " " + MONTH_FORMAT.format(date)); 

と日付(現在の年)によってフィルタリングされたリストを取得するための私のアプリでカーソル問合せ:

public List<Moment> MOMENT_YEAR(String year) { 
     try { 
      Moment MOMENT_TABLE; 
      List<Moment> MOMENTS = new ArrayList<>(); 
      DB_HELPER.openDatabase(); 
      db.beginTransaction(); 
      Cursor MOMENT_CURSOR = db.rawQuery("SELECT * FROM tblMoment WHERE strftime('%Y', searchDate) =" + year, null); 
      db.setTransactionSuccessful(); 
      MOMENT_CURSOR.moveToFirst(); 
      while (!MOMENT_CURSOR.isAfterLast()) { 
       MOMENT_TABLE = new Moment(MOMENT_CURSOR.getInt(0), MOMENT_CURSOR.getString(1), MOMENT_CURSOR.getString(2), MOMENT_CURSOR.getString(3), 
         MOMENT_CURSOR.getString(4), MOMENT_CURSOR.getString(5), MOMENT_CURSOR.getInt(6), MOMENT_CURSOR.getInt(7) != 0); 
       MOMENTS.add(MOMENT_TABLE); 
       MOMENT_CURSOR.moveToNext(); 
      } 
      MOMENT_CURSOR.close(); 
      return MOMENTS; 
     } catch (Exception e) { 
      return null; 
     } finally { 
      db.endTransaction(); 
      DB_HELPER.closeDatabase(); 
     } 
    } 

私は試しましたが、何も起こらず、リストは空(空)です。
私は今年のほとんどの日付を持っています。

答えて

1

明確ではありませんか?クエリ内のSQL文字列区切り文字(')で変数yearを囲みます。

Cursor MOMENT_CURSOR = 
    db.rawQuery("SELECT * FROM tblMoment WHERE strftime('%Y', searchDate) = '" + year + "'", null); 

パラメトリッククエリを使用するだけです(文字列区切り文字はAndroidによって処理されます)。

Cursor MOMENT_CURSOR = 
    db.rawQuery("SELECT * FROM tblMoment WHERE strftime('%Y', searchDate) = ?", new String[]{year}); 
関連する問題