Sql Android数据库错误?
我的Android应用程序中有一个MenuItem,可以删除数据库中的所有值,它更多地用于我的调试目的,一段时间后,插入虚拟值会变得多余。无论如何,我已经使用LogCat调试了在模拟器中运行的程序,它给了我一个错误:Sql Android数据库错误?,sql,android,database,Sql,Android,Database,我的Android应用程序中有一个MenuItem,可以删除数据库中的所有值,它更多地用于我的调试目的,一段时间后,插入虚拟值会变得多余。无论如何,我已经使用LogCat调试了在模拟器中运行的程序,它给了我一个错误: Failure 21 (out of memory) on 0x0 when preparing 'DELETE FROM <MY DBTABLE>' 这不是我现有的功能,我最初只有: db.execSQL("DELETE FROM " + DATABASE_TABL
Failure 21 (out of memory) on 0x0 when preparing 'DELETE FROM <MY DBTABLE>'
这不是我现有的功能,我最初只有:
db.execSQL("DELETE FROM " + DATABASE_TABLE);
但它不起作用,所以我把它注释掉,然后尝试先删除表,然后创建一个新表,但每次都是相同的错误
是否有人知道此错误发生的原因或避免此错误的方法
编辑:此方法不在循环内部运行,它是菜单按钮的一部分,当您选择它时,将调用deleteAll()方法。需要注意的一点是,我通过自己创建的适配器类调用了此方法,下面是我代码的步骤:
private TrackerDBAdapter db;
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case VIEW_DATABASE:
Log.v(TAG, "Clicking on the view database menu option");
Toast.makeText(this, "This should show the databases.",
Toast.LENGTH_LONG).show();
return true;
case DELETE_VALUES:
Log.v(TAG, "Clicking on the delete values menu option");
db.deleteAll();
Toast.makeText(this, "Database is empty",
Toast.LENGTH_LONG).show();
return true;
}
然后在我的TrackAdapter类中。变量dbhelper是DatabaseHelper对象,它具有问题中的第一个deleteAll(SQLiteDatabase db)代码
private DatabaseHelper dbhelper;
private SQLiteDatabase db;
public void deleteAll() {
dbhelper.deleteAll(db);
}
我不记得为什么我要调用一个方法,调用另一个方法。也许是出于绝望?但不管怎样,我要摆弄它,看看我是否清理了代码,也许这样我可以回答我自己的问题。我忽略了调用另一个方法的方法,检查了SQLiteDatabase API,发现它有一个内置的删除函数:
private DatabaseHelper dbhelper;
private SQLiteDatabase db;
public void deleteAll() {
dbhelper.deleteAll(db);
}
delete(String tableName, String[] whereClause, String whereArgs) {}
作为where子句传入null将删除整行,因此这里添加的最后一点是新的和改进的delete函数
public boolean deleteAll() {
try {
open();
}
catch (SQLException e) {
Log.v(DatabaseHelper.TAG, "SQLException caught");
}
return db.delete(DatabaseHelper.DATABASE_TABLE, null, null) > 0;
}
与其使用Delete From,不如尝试删除表?从表中删除将创建事务日志空间。而DROP TABLE命令不会创建事务日志空间。这可能是您出错的原因 哎呀。。。空的“catch”块;)至少把它们记录下来。即使这只是一种调试方法。但这不是问题所在。这个表有多少行?“onCreate(db)”是做什么的?你在循环中运行这个吗?请澄清一下。这个表有多少行?我想自己试一试,构建一个测试用例,看看我是否能找到答案。这是否意味着你仍然会得到错误?还是已经修好了?关于异常的日志记录,考虑至少附加“E.GETMaseAGE()”。如果没有这一点,它与编写“未知错误”或“oops!”几乎是一样的。这不会帮助你调试。它完全修复了,是的,这是一个关于异常的好补充,我正在计划重写东西,目前我在发布时可能有13行。祝你好运,谢谢你的建议。