SQLite Получение только последней записи, а не всех записей

У меня всего 4 записи в таблице ecare, где 2 records статус отправлен = 1, а остальные 2 записи статус sent = 0

RECORDS

1st Record : Track 1 [sent = 1]

2nd Record : Track 2 [sent = 1]

3rd Record : Track 3 [sent = 0]

4th Record : Track 4 [sent = 0]

Но при получении только последней записи (т.е. - дорожки 4) не все две записи с таким статусом отправляются = 0

Вот запрос SQLite, который я использую для извлечения данных из базы данных

public synchronized List<String> getECareData() {

        String sql = "SELECT p.sent,e.*, e.no _id from ecare e LEFT JOIN pweb p ON e.h_id=p.h_id WHERE p.sent = '0' GROUP BY e.h_id";

        List<String> records = new ArrayList<String>();
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(sql, null);
        while (cursor.moveToNext()) {
            records.add(cursor.getString(0));
        }
        return records;
    }

ОБНОВЛЕНО

 public synchronized List<String> getECareData() {

    String sql = "SELECT p.sent,e.*, e.no _id from ecare e LEFT JOIN pweb p ON e.h_id=p.h_id WHERE p.sent = '0' GROUP BY e.h_id";

    List<String> records = new ArrayList<String>();
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(sql, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            records.add(cursor.getString(0));
        } while (cursor.moveToNext());
    }

    Log.d("records:", records.toString());

    return records;
}

Журнал говорит:

D/records:: [Getting only LAST record here] the 4th one

Я думаю, что-то есть wrong с запросом, потому что я получаю только последнюю запись в курсоре

ОБНОВЛЕННЫЕ ЗАПИСИ

1st Record : Track 1 [sent = 1]

2nd Record : Track 2 [sent = 1]

3rd Record : Track 3 [sent = 0]

4th Record : Track 4 [sent = 0]

5th Record : Track 5 [sent = 0]

Но, получая только последнюю запись (т.е. - дорожку 5), не все три записи с таким статусом отправляются = 0

Журнал говорит:

D/records:: [Getting only LAST record here] the 5th one

ОБНОВЛЕННЫЙ ЗАПРОС - Удален GROUP BY из запроса

И теперь, получая все записи, даже те, которые принадлежат отправлено = 1, тогда как я просто хочу получить данные, которые принадлежат только отправлено = 0

String sql = "SELECT p.sent,e.*, e.no _id from ecare e LEFT JOIN pweb p ON e.h_id=p.h_id WHERE p.sent = '0' ";

3 ответа

Ваш пропавший startManagingCursor() метод.

  Cursor cursor = db.rawQuery(sql, null);
  cursor.getCount();
  startManagingCursor(cursor);//the important line
      cursor.moveToFirst();
      if(cursor.getCount() == 0)
      {
           //error no records
      }
      else
      {
      for(int i=0;i<cursor.getCount();i++)
      {
              records.add(cursor.getString(0));
          adapter.add(aString);
          cursor.moveToNext();
      }
      cursor.moveToFirst();
      }

НОТА:startManagingCursor() устарела, поскольку выполняет операции в основном потоке, которые могут заморозить пользовательский интерфейс и обеспечить плохое взаимодействие с пользователем. Вы должны использовать CursorLoader с LoaderManager вместо.

Я бы попробовал:

String sql = "SELECT p.sent,e.*, e.no _id 
              FROM ecare e, pweb p 
              WHERE e.h_id=p.h_id 
              AND e.sent = '0' ";

Я пытался воссоздать вашу базу данных, это право, в чем проблема, кажется, работает.

CREATE TABLE ecare (_id INTEGER PRIMARY KEY,h_id  INTEGER ,no  INTEGER);
CREATE TABLE pweb (_id INTEGER PRIMARY KEY,h_id  INTEGER ,sent  INTEGER);
sqlite> insert into ecare values(1, 10,1);
sqlite> insert into ecare values(2, 20,2);
sqlite> insert into ecare values(3, 30,3);
sqlite> insert into ecare values(4, 40,4);
sqlite>
sqlite> insert into pweb values(1, 10,1);
sqlite> insert into pweb values(2, 20,1);
sqlite> insert into pweb values(3, 30,0);
sqlite> insert into pweb values(4, 40,0);
sqlite> select * from ecare;
1|10|1
2|20|2
3|30|3
4|40|4
sqlite> select * from pweb;
1|10|1
2|20|1
3|30|0
4|40|0
sqlite> SELECT p.sent,e.*, e.no _id from ecare e LEFT JOIN pweb p ON e.h_id=p.h_id WHERE p.sent = '0';
0|3|30|3|3
0|4|40|4|4
sqlite>
Другие вопросы по тегам