Ошибка при обновлении базы данных SQLite - PullRequest
0 голосов
/ 12 февраля 2011

Я пытаюсь выполнить обновление базы данных для моего приложения для Android.Я попытался использовать следующий код:

// Create a table that is equivalent to the existing one but with one column as TEXT instead of INTEGER
db.execSQL("CREATE VIRTUAL TABLE distributors_new USING FTS3 (fname TEXT, lname TEXT, phoneNumber TEXT, email TEXT, notes TEXT, parentid INTEGER, customid TEXT FOREIGN KEY (parentid) REFERENCES distributors(rowid) ON DELETE CASCADE ON UPDATE CASCADE);");
//Insert all data from the old table to the new one.
db.execSQL("INSERT INTO distributors_new SELECT * FROM distributors;");
// Drop the old table
db.execSQL("DROP TABLE distributors;");
// Rename the new table
db.execSQL("ALTER TABLE distributors_new RENAME TO distributors;");

Однако я получил ошибку после выполнения метода onUpgrade.

02-12 16:31:16.324: ERROR/Database(1456): Failure 1 (SQL logic error or missing database) on 0x26b338 when executing 'COMMIT;'
02-12 16:31:16.334: ERROR/SQLiteOpenHelper(1456): Couldn't open mlmDB for writing (will try read-only):
02-12 16:31:16.334: ERROR/SQLiteOpenHelper(1456): android.database.sqlite.SQLiteException: SQL logic error or missing database: COMMIT;
02-12 16:31:16.334: ERROR/SQLiteOpenHelper(1456)

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

Ответы [ 4 ]

1 голос
/ 12 февраля 2011

Я добавил

db.beginTransaction();
// Code
db.endTransaction();

А теперь, похоже, работает.

1 голос
/ 12 февраля 2011

Есть, AFAIK, нет причин делать это. Sqlite использует динамическую типизацию , поэтому тип данных при создании таблицы не имеет большого значения. Это влияет только на сходство типов, проверьте связанную документацию.

1 голос
/ 12 февраля 2011

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

0 голосов
/ 12 февраля 2011

Ошибка может быть связана с «помещением« NULL »в столбец не NULL».

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...