Intereting Posts
Убедитесь, что заданное время находится между двумя моментами независимо от даты Тестирование модуля Android Studio: чтение данных (ввода) Android: изменение размера файла растрового изображения на масштабируемый выходной файл Java / Android – проверка строки JSON по строковой схеме Espresso – Выполнение действия не работает в полноэкранном режиме – InjectEventSecurityException Я хочу сделать свое приложение только в ландшафте в андроиде Как скачать пакет com.sun.net.httpserver? Android: запрос журнала вызовов после того, как он был обновлен после завершения вызова Как отключить / включить сеть, переключиться на Wi-Fi в эмуляторе Android? ProgressBar в ActionBar на Android L Preview Изменение цвета строки состояния при изменении фрагмента Сбросить панель действий после использования SearchView Android. Поставщик контента или база данных? Начать распознавание речи через голос фразой типа «О'кей, Google»? Задание ресурсов зависит от темы

Удалить первые N строк в базе данных android sqlite

Пожалуйста, дайте мне знать, как удалить n-строки в базе данных android sqlite. Я использовал этот код:

String ALTER_TBL ="delete from " + MYDATABASE_TABLE + "where"+KEY_ID+"in (select top 3"+ KEY_ID +"from"+ MYDATABASE_TABLE+"order by _id );"; sqLiteDatabase.execSQL(ALTER_TBL); 

Но это показывает ошибку.

 03-21 13:19:39.217: INFO/Database(1616): sqlite returned: error code = 1, msg = near "in": syntax error 03-21 13:19:39.226: ERROR/Database(1616): Failure 1 (near "in": syntax error) on 0x23fed8 when preparing 'delete from detail1where_id in (select top 3_idfromdetail1order by _id );'. 

Solutions Collecting From Web of "Удалить первые N строк в базе данных android sqlite"

 String ALTER_TBL ="delete from " + MYDATABASE_TABLE + " where "+KEY_ID+" in (select "+ KEY_ID +" from "+ MYDATABASE_TABLE+" order by _id LIMIT 3);"; 
  • В sqlite, о котором я знаю, нет команды «top 3», вам нужно добавить ограничение
  • Следите за пробелами, когда вы добавляете строки вместе: "delete from" + TABLE + "where" = "delete frommytablewhere"

Этот подход использует два шага для удаления первых N строк.

  1. Найдите первые N строк:

    SELECT id_column FROM table_name ORDER BY id_column LIMIT 3

    Результатом является список идентификаторов, которые представляют первые N (здесь: 3) строки. Часть ORDER BY важна, поскольку SQLite не гарантирует никакого заказа без этого предложения. Без ORDER BY оператор может удалить 3 случайные строки.

  2. Удалите любую строку из таблицы, которая соответствует списку идентификаторов:

    DELETE FROM table_name WHERE id_column IN ( {Result of step 1} )

    Если результат с шага 1 пуст, ничего не произойдет, если будет меньше N строк, они будут удалены.

    Важно отметить, что id_column должен быть уникальным, иначе больше, чем предполагаемые строки будут удалены. В случае, если столбец, который используется для упорядочения, не является уникальным, весь оператор может быть изменен на DELETE FROM table_name WHERE unique_column IN (SELECT unique_column FROM table_name ORDER BY sort_column LIMIT 3) . Подсказка: ROWID SQLite является хорошим кандидатом для unique_column при удалении по таблицам (может не работать при удалении по просмотрам – не уверен здесь).

Чтобы удалить последние N строк, порядок сортировки должен быть отменен до нисходящего ( DESC ):

 DELETE FROM table_name WHERE unique_column IN ( SELECT unique_column FROM table_name ORDER BY sort_column DESC LIMIT 3 ) 

Чтобы удалить N- го числа в M- я строку, предложение LIMIT может быть расширено OFFSET . Пример ниже пропустит первые 2 строки и вернет / удалит следующие 3.

 SELECT unique_column FROM table_name ORDER BY sort_column LIMIT 3 OFFSET 2 

Установка LIMIT на отрицательное значение (например, LIMIT -1 OFFSET 2 ) приведет к возврату всех строк, кроме первых 2, что приведет к удалению всего, кроме первых двух строк, что также можно было бы сделать, повернув SELECT .. WHERE .. IN () SELECT .. WHERE .. NOT IN ()


SQLite имеет возможность включить часть ORDER BY x LIMIT n непосредственно в инструкции DELETE без подзапроса. Эта опция не включена на Android и не может быть активирована, но это может представлять интерес для людей, использующих SQLite для других систем:

  DELETE FROM table_name ORDER BY sort_column LIMIT 3 

Кажется, что вы пропустили некоторые пробелы:

 "where"+KEY_ID+"in.. 

должно быть:

 "where "+KEY_ID+" in... 

Кроме того, вам нужно использовать оператор limit вместо top:

Вы можете попробовать этот код

Int id;

 public void deleteRow(int id) { myDataBase.delete(TABLE_NAME, KEY_ID + "=" + id, null); } 

String id;

 public void deleteRow(String id) { myDataBase.delete(TABLE_NAME, KEY_ID + "=\" " + id+"\"", null); } 

Я сделаю:

 db.delete(MYDATABASE_TABLE, "KEY_ID > "+ value, null); 

Это немного длинная процедура, но вы можете сделать это так

Сначала получите столбец ids таблицы, из которого вы хотите удалить определенные значения

 public Cursor KEY_IDS() { Cursor mCursor = db.rawQuery("SELECT KEYID " + " FROM MYDATABASE_TABLE ;", null); if (mCursor != null) { mCursor.moveToFirst(); } return mCursor; } 

Соберите его в списке массивов

 ArrayList<String> first = new ArrayList<String>(); cursor1 = db.KEY_IDS(); cursor1.moveToFirst(); startManagingCursor(cursor1); for (int i = 0; i < cursor1.getCount(); i++) { reciv1 = cursor1.getString(cursor1 .getColumnIndex(DBManager.Player_Name)); second.add(reciv1); } 

И запрос удаления огня

 for(int i = 0 ;i<second.size(); i++) { db.delete(MYDATABASE_TABLE KEYID +"=" + second.get(i) , null); } 

Вы можете использовать следующий режим: (в дополнение к ответу, предоставленному «zapl»).

 **DELETE FROM {Table-X} WHERE _ID NOT IN (SELECT _ID FROM {Table-X} ORDER BY _ID DESC/ASC LIMIT (SELECT {Limit-Column} FROM {SpecificationTable}) );** 

Где {Таблица-X} ссылается на таблицу, которую вы хотите удалить, _ID – это главный уникальный столбец DESC / ASC – на основании того, хотите ли вы удалить верхние записи или последние записи и, наконец, в предложении "LIMIT" Мы предоставляем коэффициент «n» с использованием другого запроса, который вызывает в {Limit-Column} из {SpecificationTable}: который содержит значение, против которого вы хотите их удалить.

Надеюсь, это поможет кому-то.

Счастливое кодирование.