2016-05-25 7 views
0

私はエントリの範囲を与えるSQLクエリを実装したいと思います。例:私はこのようなすべてのエントリを取得する瞬間SQLiteインターバル内のエントリの範囲を照会

public List<Entry> getEntries(int lowerValue, int upperValue){ 
//Select upper - lower entries. 
} 

getEntries(0, 20) --> First 20 Entries 
getEntries(21, 40) --> Entry 21 to 40 
getEntries(12, 200) --> Entry 12 to 200 

public List<Log> getLogs(){ 
     List<Log> list = new ArrayList<>(); 
     SQLiteDatabase db = getWritableDatabase(); 
     String query = "SELECT * FROM " + TABLE_LOGS + " WHERE 1"; 

     //Cursor points to a location in your results 
     Cursor c = db.rawQuery(query, null); 
     //Move to the first row in your results 
     c.moveToFirst(); 

     //Position after the last row means the end of the results 
     while (!c.isAfterLast()) { 
      if (c.getString(c.getColumnIndex("type")) != null) { 
       int id = c.getInt(c.getColumnIndex("_id")); 
       int type = c.getInt(c.getColumnIndex("type")); 
       long date = c.getLong(c.getColumnIndex("date")); 
       int refId = c.getInt(c.getColumnIndex("refId")); 
       String extra = c.getString(c.getColumnIndex("extra")); 

       list.add(new Log(id, type, date, refId, extra)); 
      } 
      c.moveToNext(); 
     } 
     db.close(); 
     c.close(); 
     return list; 
    } 

私はLIMIT句がある知っているが、それは最初のエントリから常に開始します。あなたは

LIMIT <skip>, <count> 

または

LIMIT <count> OFFSET <skip> 

を使用することができますあなたが必要なもの

答えて

0

はLIMITの組み合わせであると

をOFFSETので、いくつかの例は、

"SELECT * FROM " + TABLE_LOGS + " WHERE type=1 LIMIT 20 OFFSET 0" 
"SELECT * FROM " + TABLE_LOGS + " WHERE type=1 LIMIT 20 OFFSET 20" 
"SELECT * FROM " + TABLE_LOGS + " WHERE type=1 LIMIT 20 OFFSET 40" 

だろう希望、このヘイps。

+0

これは素晴らしい動作します。あなたがこれを手伝ってもらえますか?エントリを注文しようとするとこのエラーが出る: android.database.sqlite.SQLiteException: "WHERE"の近く:構文エラー(コード1):、コンパイル中:SELECT * FROM logs ORDER BY _id DESC WHERE 1 LIMIT 3 OFFSET 0 –

+0

うん。私は答える前にそれを見つけたはずですが、列を比較するためにWHEREを設定する必要があります。したがって、 'WHERE type = 1'のようなものです。 – Sean

+0

いいえ以前はすでに働いていません。しかし、私がIDで注文しようとすると、私はこのエラーを受け取りました! –

関連する問題