SQLite DELETE не работает - PullRequest
       3

SQLite DELETE не работает

0 голосов
/ 28 февраля 2012

Я использую следующий код для удаления определенных строк из моей таблицы SQLite.

                if (!cfile.exists()) {// remove invalid db files
                    database.rawQuery("DELETE FROM "
                            + DataBaseHelper.VFS_DATABASE_TABLE + " WHERE "
                            + DataBaseHelper.VIRTUAL_SYSTEM_COLUMN_PATH // TODO
                                                // not
                                                // removing
                                                // properly
                            + " IS ?", new String[] { pathcursora.getString(0) });
                    System.out.println("DELETE FROM "
                            + DataBaseHelper.VFS_DATABASE_TABLE + " WHERE "
                            + DataBaseHelper.VIRTUAL_SYSTEM_COLUMN_PATH
                            + " IS "+pathcursora.getString(0));
                }

Но строки не удаляются.Трассировка стека ниже:

02-28 23:13:27.564: D/NameManager.java(7098): Checking for whatever
02-28 23:13:27.587: I/System.out(7098): 1 : /mnt/sdcard/fsimages87
02-28 23:13:27.587: I/System.out(7098): 2 : /mnt/sdcard/fsimages3
02-28 23:13:27.595: I/System.out(7098): Invalid db entry for /mnt/sdcard/fsimages3 removed.
02-28 23:13:27.595: I/System.out(7098): 3 : /mnt/sdcard/fsimages2
02-28 23:13:27.603: I/System.out(7098): Invalid db entry for /mnt/sdcard/fsimages2 removed.
02-28 23:13:27.603: I/System.out(7098): 4 : /mnt/sdcard/fsimages1
02-28 23:13:27.603: I/System.out(7098): Invalid db entry for /mnt/sdcard/fsimages1 removed.
02-28 23:13:27.603: I/System.out(7098): 5 : /mnt/sdcard/fsimages
02-28 23:13:46.603: D/NameManager.java(7098): Checking for whatever
02-28 23:13:46.618: I/System.out(7098): 1 : /mnt/sdcard/fsimages87
02-28 23:13:46.618: I/System.out(7098): 2 : /mnt/sdcard/fsimages3
02-28 23:13:46.626: I/System.out(7098): Invalid db entry for /mnt/sdcard/fsimages3 removed.
02-28 23:13:46.626: I/System.out(7098): 3 : /mnt/sdcard/fsimages2
02-28 23:13:46.626: I/System.out(7098): Invalid db entry for /mnt/sdcard/fsimages2 removed.
02-28 23:13:46.626: I/System.out(7098): 4 : /mnt/sdcard/fsimages1
02-28 23:13:46.634: I/System.out(7098): Invalid db entry for /mnt/sdcard/fsimages1 removed.
02-28 23:13:46.634: I/System.out(7098): 5 : /mnt/sdcard/fsimages

Что я тут не так делаю?

Ответы [ 5 ]

2 голосов
/ 28 февраля 2012

(Если вы не находитесь в режиме автоматической фиксации) вы совершаете транзакцию?

Проверяли ли вы свой оператор SQL на точность?

0 голосов
/ 03 августа 2013

У меня была похожая проблема, и проблема была решена, когда я использовал первичный ключ в предложении WHERE команды DELETE.В моем случае у меня было два столбца (вместе), заданных в качестве первичного ключа, поэтому мне пришлось использовать WHERE column1 = 'value1' И column2 = 'value2'.

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

0 голосов
/ 16 января 2013

Если вы хотите использовать оператор SQL для записи в базу данных, используйте метод execSql () вместо rawQuery () !

Функция rawQuery () способна выполнить Select и вернуть курсор, который содержит результат запроса, но не может записать базу данных.

Функция execSql () не имеет возвращаемого значения! Если успех удаления важен, используйте метод delete ().

0 голосов
/ 28 февраля 2012

Вместо rawQuery используйте функцию delete () для выполнения безопасного параметризованного запроса:

DbHelper hDbHelper = ...;
SQLiteDatabase hDB;
hDB = hDbHelper.getWritableDatabase();

hDB.delete (DataBaseHelper.VFS_DATABASE_TABLE, 
        String.format("%s = ?",DataBaseHelper.VIRTUAL_SYSTEM_COLUMN_PATH),
        new String[] {pathcursora.getString(0)});
0 голосов
/ 28 февраля 2012

Я полагаю, вам нужны одинарные кавычки вокруг значения вашего параметра или использовать связанную переменную (предпочтительно).

DELETE FROM vs_table WHERE vspath IS '/mnt/sdcard/fsimages1';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...