我正在使用以下查询创建表:
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,因为这是我在创建数据库时声明的内容。
当列的所有值都为空时,是否有其他方法可以检索正确的列类型。
答案 0 :(得分:2)
大多数SQL数据库引擎(除了以外的每个SQL数据库引擎) 据我们所知,SQLite使用静态,严格的类型。随着静态 输入时,值的数据类型由其容器确定 - 存储值的特定列。
SQLite使用更通用的动态类型系统。 在SQLite中 值的数据类型与值本身相关联,而不是与其相关联 容器强>
这种返回Cursor.FIELD_TYPE_NULL
的行为(根据你并不理想)绝对是理想的,因为SQLite只是以这种方式设计的。
使用cursor.getType(i)
查询数据库以获取Container的类型只有在Container不为NULL时才有效,否则返回Cursor.FIELD_TYPE_NULL
(如您的情况)。
您可以使用PRAGMA table_info(table_name)
来检索数据类型。