2013-03-06 2 views
0

Это то, что я использую для вставки:Android SqlLite последнее обновление вставленной строки

public long insert(String content, Date startAt, Date endAt) { 
     if (content == null || startAt == null) { 
      return 0; 
     } 

     ContentValues contentValues = new ContentValues(); 
     contentValues.put(KEY_CONTENT, content); 
     contentValues.put(KEY_START_AT, startAt.getTime()); 
     if (endAt == null) { 
      contentValues.putNull(KEY_END_AT); 
     } else { 
      contentValues.put(KEY_END_AT, endAt.getTime()); 
     } 

     return sqLiteDatabase.insert(TABLE_NAME, null, contentValues); 
    } 

теперь я хочу, чтобы создать метод обновления, который будет обновлять последний вставленный строку. Как я могу получить последнюю вставленную строку?

+0

Вот еще один вопрос с проблемой похож: http://stackoverflow.com/questions/7575166/android-sqlite-get-last-insert-row-id – staaar

+0

http://stackoverflow.com/questions/7575166/android-sqlite-get-last-insert-row-id Ссылка на эту ссылку для получения последней вставленной строки – Nirmal

ответ

1

Если у вас есть идентификатор атрибута, который работает в качестве первичного ключа, вы можете сделать необработанный запрос к базе данных на SqlLite.

Cursor cc = this.mDb.rawQuery("SELECT *" + " FROM " + "<Your DATABASE_NAME> " + 
"ORDER BY id " + "DESC LIMIT 1", null); 
return cc; 

Здесь 1. Она возвращает курсор. 2. mDb - это экземпляр класса SQLiteDatabase. 3. ORDER BY id позволяет сортировать запрос по номеру идентификатора. Как я уже сказал, если у вас есть идентификатор как первичный ключ в вашей таблице, ваша последняя запись будет иметь максимальный номер идентификатора. 4. DESC позволяет сортировать по убыванию. 5. LIMIT 1 позволяет возвращать только 1 строку. 6. Всегда будьте осторожны при написании необработанных запросов, в пробелах внутри запроса может быть много боли, когда вы не будете обращаться с ними осторожно.

Для дальнейших запросов вы можете найти this учебник. И, очевидно, ответ Дивьи тоже хороший.

1

Вы можете использовать cursor для извлечения строк и сказать:

cursor.moveToLast(); 

ИЛИ

cursor.moveToPosition(cursor.getCount() - 1); 
0

Когда вы вставляете строку в таблицу, запрос вставки возвращает ключ последней вставленной строки. Теперь вы можете использовать этот ключ для обновления этой строки.

, например

INT newInsertedKey = sqLiteDatabase.insert (table_name, NULL, contentValues);

обновление table_name набор column_name = «Изменить 2» где columnID = newInsertedKey

Эффективный метод должен был бы избежать больше запросов к базе данных, чтобы получить последнюю обновленную строку.

0

Может быть, он должен использовать что-то вроде этого

public long getLastId() { 
    Cursor c = mDb.query(currentTableName, new String[] { "MAX(_id)" }, 
      null, null, null, null, null, null); 

      try{ 
    c.moveToFirst(); 
    long id = c.getLong(0); 
    return id; 
      }catch(Exception e){ 
       return 0; 
      } 

}

где _id на колонке, с помощью которого вы определить строки