需要一些有关Sqlite数据库的指导

时间:2018-08-28 03:01:46

标签: sqlite android-sqlite

我正在尝试创建一个具有8个角色的数据库。 编号 PK ,具有自动递增。之后,这4个标头和另外一个 Unitcode(也尝试自动递增)负责人,最后一个是 LastTxnNo (日期)

Picture

如果我使用所有这些类型,是否有任何问题?之后,该数据库是否可以放入android studio并调出?

1 个答案:

答案 0 :(得分:0)

  

如果我使用所有这些类型,有什么问题吗?

否(除非您超出9223372036854775807行,如下所述)。

但是,您很可能不需要使用AUTOINCREMENTAUTOINCREMENT只是说 id 必须大于曾经使用过的其他任何ID(除非您进行干预)。

真正的巫术就是在您编写INTEGER PRIMARY KEY时,即表示该列(即您的情况下的id)是特殊/通常隐藏的 rowid 列的别名。 rowid 是一个自动生成的唯一的64位有符号整数,通常它会比现有的最大 rowid 大1,首先是1。

使用AUTOINCREMENT需要一个附加表,因为它将保存分配的最高 rowid 。新的 rowid 通常比现有的最高或使用最多的 rowid 大1。由于必须读取和维护此额外的表(sqlite_sequence),因此使用AUTOINCREMENT会产生开销。建议除非必要,否则不要使用AUTOINCREMENT

AUTOINCREMENT由于下一个 rowid 必须大于任何现有行,因此如果您达到9223372036854775807(限制为64位带符号整数),则会失败并出现SQLITE_FULL异常。虽然没有AUTOINCREMENT,但使用的算法会尝试查找较低的未使用/可用ID,因此它不会失败。

您不妨阅读SQLite Autoincrement

可能不需要UnitCode列。您建议您希望它复制 rowid 的行为。这样,您可以简单地利用 rowid (如先前回答here)。

如果PersonIncharge可以负责Information表中的多行,那么您可能还有一个PersonInCharge表。例如您可能在1000条信息行中使用了10个老板。如果该人名的长度超过1个字符,则使用PersonInCharge表的 rowid 引用该人名的可能性不大,这可能是更有效的搜索方式,并且可以占用更少的空间和内存。它肯定会遵循规范化的概念(减少数据重复)。

  

之后,该数据库是否可以放入android studio中并调用它   出来吗?

是的,可以将外部创建的数据库复制到资产文件夹或资产文件夹的子目录。然后,您将具有一个过程来检查数据库是否存在,如果不存在,则可以将数据库从资产文件夹复制到合适的位置(数据库或通常位于data/data/ your_package /databases/),复制的文件名应与数据库名称(包括文件扩展名)相同。您可能会发现SQLiteAssethelper个用途。

请注意, SQLiteAssetHelper 希望数据库文件(资产)位于资产文件夹/目录的 databases 文件夹/目录中