如果特定列

时间:2017-04-29 04:37:10

标签: android sqlite android-sqlite

我正在使用以下查询创建表:

private static final String SQL_CREATE_ENTRIES = "CREATE TABLE person_info ( uniqueId INTEGER,first_name TEXT,last_name TEXT,
address TEXT)";
sqLiteDatabase.execSQL(SQL_CREATE_ENTRIES);

我按如下方式插入值:

  // Create a new map of values, where column names are the keys
    ContentValues values = new ContentValues();
    values.put("first_name", "Anshul");
    values.put("last_name", "Jain");
    values.put("address", "Bangalore");

    return db.insert(TABLE_NAME, null, values);

请注意,我没有为uniqueId列提供任何值。因此,uniqueId列值为空。

当我查询数据库并使用cursor.getType(i)尝试每列的类型时,它会返回Cursor.FIELD_TYPE_NULL的uniqueId列。根据文档,如果所有列值都为null,则它将返回此值。但理想情况下它应该返回Cursor.FIELD_TYPE_INTEGER,因为这是我在创建数据库时声明的内容。

当列的所有值都为空时,是否有其他方法可以检索正确的列类型。

1 个答案:

答案 0 :(得分:2)

  

大多数SQL数据库引擎(除了以外的每个SQL数据库引擎)   据我们所知,SQLite使用静态,严格的类型。随着静态   输入时,值的数据类型由其容器确定 -   存储值的特定列。

     

SQLite使用更通用的动态类型系统。 在SQLite中   值的数据类型与值本身相关联,而不是与其相关联   容器

SQLite Docs

这种返回Cursor.FIELD_TYPE_NULL的行为(根据你并不理想)绝对是理想的,因为SQLite只是以这种方式设计的。

使用cursor.getType(i)查询数据库以获取Container的类型只有在Container不为NULL时才有效,否则返回Cursor.FIELD_TYPE_NULL(如您的情况)。

您可以使用PRAGMA table_info(table_name)来检索数据类型。

检查此答案 - Getting the type of a column in SQLite