【问题标题】:Android Ormlite mapping to SqliteAndroid Ormlite 映射到 Sqlite
【发布时间】:2013-02-08 03:57:25
【问题描述】:

我找不到 Android 到 Sqlite 的 Ormlite DataType 映射。我找到了OrmLite SQL Data Types,但 Sqlite 列是空白的。有谁知道我能找到他们吗?

我需要他们更新我的数据库架构,即:

  meetingDao.executeRaw("ALTER TABLE meeting ADD closed ????");

【问题讨论】:

    标签: android android-sqlite ormlite


    【解决方案1】:

    我不太确定你在问什么,但 Sqlite 是一个无类型数据库。基本上所有内容都存储为字符串,并带有某些函数,允许在运行时对这些字符串进行数值、时间等计算。

    引用Sqlite data-type docs

    SQLite 是“无类型”的。这意味着您可以在任何表的任何列中存储任何类型的数据,而不管该列的声明数据类型如何。 (请参阅下面第 2.0 节中此规则的一个例外。)此行为是一项功能,而不是错误。假设数据库存储和检索数据,并且该数据的格式与数据库无关。在大多数其他 SQL 引擎中发现并在 SQL 语言规范中编码的强类型系统是一个错误功能 - 它是一个示例实现显示在界面中。 SQLite 试图通过允许您将任何类型的数据存储到任何类型的列中并允许数据类型规范的灵活性来克服这个错误。

    在您提到的 SQL 数据类型页面中,Sqlite 列是空白的,因为它使用基本数据列而无需覆盖它们。即使我更改了类的基本类型,Sqlite 也不会覆盖任何类型,因为它还是一个无类型数据库。

    【讨论】:

    • 谢谢格雷。因此,在升级 Android sqlite 数据库时,我不必匹配数据实体类,即。 @DatabaseField 私有整数计数; DateType INTERGER 不需要在 ALTER 语句中定义的 DataType。 meetingDao.executeRaw("ALTER TABLE 会议添加计数");这就是所有需要的。我问这个是因为文档表明 ormlite 本身确实定义了数据类型。 IE。创建表 orders (id INTEGER AUTO_INCREMENT , account_id INTEGER...
    • AUTO_INCREMENT 是分配 ID 所必需的。然而,字段类型根本不使用,也不需要匹配。
    【解决方案2】:

    实际上,由原始问题链接的映射表:OrmLite SQL Data Types 显示了 ORMLite 正在使用的正确类型,尽管它仅显示了 Base Database 列中每个数据库的差异。例如,Java long 被创建为 BIGINT 类型的列。

    虽然 SQLite3 没有类型,但它具有 ORMLite 在创建表时使用的 type affinities 的概念。

    您可能也应该在数据库升级中包含这些类型,否则当 ORMLite 自动从头开始创建表时和升级时,您将获得不同的表定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 1970-01-01
      相关资源
      最近更新 更多