带整数列的SQLite表存储字符串

时间:2010-09-30 11:53:20

标签: android database sqlite types

我在申请中发现了一些东西。我创建了一个包含名为type的列的表,它应该存储整数:

db.execSQL("CREATE TABLE " + CellColumns.TABLE + " ("
    + CellColumns._ID + " INTEGER PRIMARY KEY,"
    + CellColumns.TYPE + " INTEGER," // <-- this
    + CellColumns.CELL_ID + " INTEGER,"
    + CellColumns.CITY_ID + " INTEGER,"
    + CellColumns.LOAD + " INTEGER,"
    + CellColumns.ORIENTATION + " INTEGER);");

读:

String type = c.getString(c.getColumnIndex(CellColumns.TYPE));

但不知何故,我总是将字符串存储在其中而没有任何问题(似乎我忘了这个专栏是用于整数)。还可以使用查询读取字符串。这个列的动态“类型转换”是sqlite的一个特性吗?

2 个答案:

答案 0 :(得分:15)

来自here

  

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

     

SQLite使用更通用的动态类型系统。在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联。 SQLite的动态类型系统向后兼容其他数据库引擎的更常见的静态类型系统,因为在静态类型数据库上工作的SQL语句应该在SQLite中以相同的方式工作。但是,SQLite中的动态类型允许它执行传统刚性类型数据库中无法实现的操作。

所以是的,这是sqlite的一个特性。阅读我链接的整个页面,仔细阅读:)

答案 1 :(得分:0)

您可以通过c.getInt()c.getDouble()等来获取它。