大家好,我遇到以下问题。我最近在 SQLite 中的数据库中添加了一个额外的列,现在它给我一个 SQL 逻辑错误或丢失数据库错误
我对数据库进行了更改,并删除了 BB 模拟器上的虚拟 SD 卡以删除旧数据库并允许在模拟器上创建新数据库,出现问题的函数代码如下:
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
,如果我恢复更改就不再有任何问题,有什么想法吗?
最佳答案
听起来数据库已更改但未提交 - 这意味着对数据库的下一个查询将返回“损坏”状态。
一定要提交任何更改 - 并确保像这样的极端更改(如果即时完成)是在锁定的数据库上执行的(不希望任何其他讨厌的线程尝试访问它!)
关于java - BlackBerry 上的 SQLite 出现 SQL 逻辑错误或丢失数据库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5009320/