Sql Android数据库错误?

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

我的Android应用程序中有一个MenuItem,可以删除数据库中的所有值,它更多地用于我的调试目的,一段时间后,插入虚拟值会变得多余。无论如何,我已经使用LogCat调试了在模拟器中运行的程序,它给了我一个错误:

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行。祝你好运,谢谢你的建议。