将表名称作为Android中的String传递给SQLiteDatabase删除函数

时间:2016-07-04 14:04:15

标签: android database sqlite

如果我跑:

void deleteTableRecords() {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_ALBUMS,null,null);
        db.close();
    }

我得到了我想要的结果。但是,如果我跑:

void deleteTableRecords(String tableName) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(tableName,null,null);
        db.close();
    }

呼叫deleteTableRecords("TABLE_ALBUMS")我遇到了崩溃,并告诉他们:

android.database.sqlite.SQLiteException: no such table: TABLE_ALBUMS

我应该传递一个表名,就好像不是一个String?

2 个答案:

答案 0 :(得分:3)

TABLE_ALBUMS是变量的名称。它的价值很可能是别的东西。

我猜您为TABLE_ALBUMS分配了一个值,例如:

private static final String TABLE_ALBUMS = "someValue";

在这种情况下,您需要传递实际值,而不是变量名称:

deleteTableRecords("someValue");

更好的方法是使其成为公共常量:

public class DbHelper {
    public static final String TABLE_ALBUMS = "someValue";

    // ...

}

因此您可以以静态方式访问它:

deleteTableRecords(DbHelper.TABLE_ALBUMS);

答案 1 :(得分:1)

在方法中传递变量而不是String。

假设你有

class DbHelper{
    public static final String TABLE_ALBUMS = "albums";
}

使用:

deleteTableRecords(DbHelper.TABLE_ALBUMS);