SQLite на BlackBerry дает ошибку логики SQL или отсутствует ошибка базы данных
Привет всем, у меня есть следующая проблема. Недавно я добавил дополнительный столбец в свою базу данных в SQLite, и теперь он дает мне SQL logic error or missing database error
Я внес изменения в базу данных и удалил виртуальную SD-карту на симуляторе BB, чтобы удалить старую базу данных и разрешить создание новой на симуляторе. Код функции, вызывающей проблему, следующий:
public Vector obtenerVoiceNotes()
{
Vector voiceNotes = new Vector();
long id, idRemoto, duracion;
byte[] audioArray;
String nombre, comentario;
try
{
// Se prepara la sentencia SQL
Statement statement = _BD.createStatement("SELECT * FROM VoiceNote WHERE idUsuario = ?");
statement.prepare();
statement.bind(1, MainApp._user.getIdUser());
// Se define un cursor para navegar por el resultado
Cursor cursor = statement.getCursor();
// Se itera sobre el cursor y se agrega al arreglo de notas
while(cursor.next())
{
Row row = cursor.getRow();
id = row.getInteger(0);
audioArray = row.getBlobBytes(1);
nombre = row.getString(2);
comentario = row.getString(3);
idRemoto = row.getInteger(4);
duracion = row.getInteger(5);
long userId = MainApp._user.getIdUser();
VoiceNote voiceNote = new VoiceNote(nombre, comentario, audioArray, userId);
voiceNote.set_id(id);
voiceNote.set_idRemoto(idRemoto);
voiceNote.set_duration(duracion);
voiceNotes.addElement(voiceNote);
}
}
catch (DatabaseException e)
{
System.out.println();
MainApp.messageDialog(e.toString());
} catch (DataTypeException e) {
// TODO Auto-generated catch block
MainApp.messageDialog(e.toString());
}
// Se retorna el arreglo de notas obtenido
return voiceNotes;
}
Исключение происходит на statement.prepare()
это оператор создания для моей таблицы:
CREATE TABLE "VoiceNote" (
"ID" INTEGER PRIMARY KEY NOT NULL ,
"Track" BLOB,
"Nombre" VARCHAR(30) NOT NULL UNIQUE,
"Comentario" VARCHAR(80),
"idRemoto" INTEGER NOT NULL DEFAULT -1,
"Duracion" INTEGER NOT NULL DEFAULT 0,
"idUsuario" INTEGER NOT NULL DEFAULT -1)
Новый столбец idUsuario
если я отменить изменения, то больше нет проблем, есть идеи?
2 ответа
Похоже, база данных была изменена, но не зафиксирована - это означает, что следующий запрос к базе данных вернет состояние "повреждено".
Обязательно внесите любые изменения - и убедитесь, что такие экстремальные изменения, как это, выполняются на лету в заблокированной базе данных (не нужно, чтобы какие-то другие надоедливые потоки пытались получить к ней доступ!)
Мне удалось это решить. Я удалил приложение из симулятора вместе с SD-картой. Я сбросил и заново создал базу данных, чтобы у меня была правильная логика на телефоне, и она работала нормально.