【发布时间】:2012-05-02 08:37:23
【问题描述】:
我有一个带有自动增量主键的 sqlite 数据库,它通过 java 接口。 由于应用程序的原因,我不能使用数据库中自动生成的主键,所以我需要为 java 中的每一行创建一个 id。
所以我的问题是,是否有一种适用于 java 的算法,我可以遵循它来为数据库创建唯一的整数 id。
我知道我可以增加等,但我需要使用回滚、溢出和间隙填充等东西。
【问题讨论】:
-
出于“申请原因”?我不确定你到底是什么意思,但也许 sqlite 的 sqlite3_int64 sqlite3_last_insert_rowid 可以帮助你并使使用数据库生成你的 ID 成为可能......看看文档:sqlite.org/c3ref/last_insert_rowid.html
-
由于我们应用程序的设计,我们需要能够在记录写入数据库之前知道记录的 id,如果我们允许 sqlite 管理 id 创建,sqlite3_last_insert_rowid 会有所帮助,基本上我想要数据库中使用的自动增量算法的java实现
-
你真的需要填补空白吗?如果不是,那么最简单的方法是实现类似于 Oracle 的序列的东西,即一种以原子方式获取顺序 id 的方法。您的应用程序负载平衡(或者永远不会)?如果是这样,那么我不会在代码中这样做。
-
应用程序没有负载均衡,填空可能不是问题,但在 sqlite 中整数 ID 是否有最大值?
-
它很大 - 请参阅 SQLite3 Integer Max Value 和 Limits In SQLite