检查DB是否包含特定主键值的最有效方法是什么?

时间:2016-05-23 06:18:34

标签: android sqlite android-sqlite

我想做这样的事情:

public boolean containsKey(int primaryKey) {
    SQLiteDatabase db = getReadableDatabase();

    // what should i do here to determine if the db contains the primaryKey?
}

检查db是否包含指定值的最有效方法是什么?

3 个答案:

答案 0 :(得分:1)

您可以尝试读取具有该PK值的行:

public boolean containsKey(int primaryKey) {
    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.query("TableName", null, "IDColumn = " + primaryKey,
                             null, null, null, null);
    return cursor.moveToFirst();
}

但是,最好使用helper function,以避免不得不使用游标:

public boolean containsKey(int primaryKey) {
    SQLiteDatabase db = getReadableDatabase();
    return DatabaseUtils.queryNumEntries(db, "TableName", "IDColumn = " + primaryKey) > 0;
}

答案 1 :(得分:0)

你应该检查sqlite方案。你可以尝试

"SELECT name FROM sqlite_master WHERE type='table'"

第二种变体:

PRAGMA table_info(table-name);

答案 2 :(得分:0)

如果您正在寻找获取表格的列名称:

PRAGMA table_info(your_table_name);

示例:

PRAGMA table_info(Login);

如果您在登录表中有主键,您将获得pk值1。

PRAGMA

上查看本教程
  

此pragma为指定表中的每列返回一行。   结果集中的列包括列名,数据类型,是否   或者不是列可以为NULL,以及列的默认值。   " pk"对于不是的列,结果集中的列为零   主键的一部分,是主键中列的索引   作为主键一部分的列的键。