2012-01-23 59 views
6

我正在制作SQLite C API的包装。我想将rowid作为整数类型返回。为了标记错误情况,我需要一个无效的rowid值。 SQLite rowid是否有无效值?或者有符号64位整数的所有值对rowid有效? (因为如果是这样,我必须选择另一种方式来实现标记错误的情况)SQLite rowid的有效范围?

+0

以下是关于rowid的规范:http://www.sqlite.org/autoinc.html – Eonil

回答

13

行ID是64位有符号整数,所以最大值是0x7FFFFFFFFFFFFFFFLL。但是,除非显式输入否定或零行ID,否则自动生成的行ID始终大于零。如果您可以确定行ID始终会自动生成,那么对于错误状态返回,零或-1将是安全值。

进一步思考,我意识到如果在表中没有插入任何内容,则sqlite3_last_insert_rowid API调用将返回零,因此使事实上的“无效”行ID变为零。

+0

感谢您提到可以插入显式零和负值。我会去其他机制。 :) – Eonil