Android 如何防止删除空数据库后应用程序崩溃
我一直试图防止在数据库为空时意外单击“删除”按钮。它将在单击后崩溃 数据库处理程序Android 如何防止删除空数据库后应用程序崩溃,android,Android,我一直试图防止在数据库为空时意外单击“删除”按钮。它将在单击后崩溃 数据库处理程序 public void deleteLastMessage(Class a) { SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_NAME, KEY_MSG + " = ?", new String[] { String.valueOf(a.get_message()) }); db.c
public void deleteLastMessage(Class a) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, KEY_MSG + " = ?",
new String[] { String.valueOf(a.get_message()) });
db.close();
}
public String getLastString() {
String selectQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
cursor.moveToLast();
LastString = cursor.getString(0);
cursor.close();
db.close();
return LastString;
}
活动
public void deleteMessage(View v) {
LastMessage = new SubliminalClass(db.getLastString());
db.deleteLastMessage(LastMessage);
它在有数据要删除时工作正常,在没有数据时崩溃。
我的数据是一列字符串。
提到这一点,但无济于事
我在下面尝试过,但在没有数据时仍然崩溃
public boolean checkdb(){
SQLiteDatabase db = this.getReadableDatabase();
Cursor mCursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
Boolean rowExists;
String nullString="";
if (nullString.equals(getLastString())) //todo change this
// DO SOMETHING WITH CURSOR
rowExists = false;
else
{
// I AM EMPTY
rowExists = true;
}
return rowExists;
}
有人能帮我解决这个问题吗?试试这个
检查表行计数是否大于零,然后执行删除操作
//加入你的活动
int rowCount = db.getRowCount();
db.close();
if(rowCount>0)
{
db.deleteLastMessage(LastMessage);
}else{
}
//外接程序DBhelperClass
public int getRowCount() {
String countQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
int cnt = cursor.getCount();
cursor.close();
return cnt;
}
public void deleteLastMessage(Class a) {
try{
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, KEY_MSG + " = ?",
new String[] { String.valueOf(a.get_message()) });
db.close();
} catch (Exception e){
e.printStackTrace();
}
}
您可以在删除代码周围添加try/catch checkdb函数也可以是这样的
public boolean checkdb(){
SQLiteDatabase db = this.getReadableDatabase();
Log.d(TAG,"Got Readable DB")
Cursor mCursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
Boolean rowExists = false;
String nullString="";
if(mCursor != null){
Log.d(TAG,"Cursor is not null")
try{
rowExists = mCursor.getCount() > 0;
Log.d(TAG,"rowExists is " + rowExists);
mCursor.close();
} catch (Exception e){
e.printStackTrace();
}
}
return rowExists;
}
有什么警告吗?错误消息?当我单击“删除”时仍然崩溃,但没有数据。我已在上述代码中添加日志。您是否可以执行上述代码并将日志粘贴到此处?无法记录到二进制事件日志:溢出。没有向HAL提供足够的数据,预期位置为5746753,仅写入了5594400文件访问recents目录时出错?不存在?。此行出现致命错误Cursor=db.rawQueryselectQuery,null;cursor.moveToLast;活动LastMessage=new SubliminalClassdb.getLastString;如果总是错误的,即使数据库中有数据!!那很好用。谢谢你的帮助。你是个救生员。