我正在尝试创建一个具有8个角色的数据库。 编号是 PK ,具有自动递增。之后,这4个标头和另外一个 Unitcode(也尝试自动递增),负责人,最后一个是 LastTxnNo (日期)。
如果我使用所有这些类型,是否有任何问题?之后,该数据库是否可以放入android studio并调出?
答案 0 :(得分:0)
如果我使用所有这些类型,有什么问题吗?
否(除非您超出9223372036854775807行,如下所述)。
但是,您很可能不需要使用AUTOINCREMENT
。 AUTOINCREMENT
只是说 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 文件夹/目录中