【问题标题】:SQLite table with integer column stores string具有整数列的 SQLite 表存储字符串
【发布时间】:2010-09-30 11:53:19
【问题描述】:

我在我的应用程序中发现了一些奇怪的东西。我创建了一个表,其中包含一个名为 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的功能吗?

【问题讨论】:

    标签: android database sqlite types


    【解决方案1】:

    来自here

    大多数 SQL 数据库引擎(据我们所知,除 SQLite 之外的所有 SQL 数据库引擎)都使用静态、严格的类型。对于静态类型,一个值的数据类型由它的容器决定 - 存储该值的特定列。

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

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

    【讨论】:

    • 以为我已经这样做了,似乎太早了。谢谢!
    【解决方案2】:

    您可以通过c.getInt()c.getDouble().. 等获得它

    【讨论】:

    • 可能是这样,但根本没有回答问题。
    猜你喜欢
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2018-10-20
    • 2014-05-05
    • 1970-01-01
    • 2017-12-29
    相关资源
    最近更新 更多