C# SQLite-正在检索最后一行的ID
我面临检索最后添加的行ID的常见问题。问题是,我希望此操作尽可能原子化,以完全线程安全。我在SQLite周围使用 这是我的研究:C# SQLite-正在检索最后一行的ID,c#,sqlite,ado.net,thread-safety,C#,Sqlite,Ado.net,Thread Safety,我面临检索最后添加的行ID的常见问题。问题是,我希望此操作尽可能原子化,以完全线程安全。我在SQLite周围使用 这是我的研究: SQLiteConnection类提供了一个LastInsertRowId属性,该属性返回上次成功插入操作的RowId。然而,如果某个线程在计算LastInsertRowId期间将某些数据推送到表中,我将得到一些错误的Id(很可能不是我正在搜索的Id) SQLite维护一个名为SQLite\u sequence的表,其中存储用于生成AUTOINCREMENT键的值。
类提供了一个SQLiteConnection
属性,该属性返回上次成功插入操作的LastInsertRowId
。然而,如果某个线程在计算RowId
期间将某些数据推送到表中,我将得到一些错误的Id(很可能不是我正在搜索的Id)LastInsertRowId
- SQLite维护一个名为
的表,其中存储用于生成SQLite\u sequence
键的值。我可以手动递增其中一个值,然后插入一个具有预定义Id值的行(我在MySQL中使用存储过程执行类似操作)。问题是,如果我希望这个解决方案是安全的,我就必须从这个表中实现选择,作为一个原子过程进行增量和更新,我不知道怎么做AUTOINCREMENT
- SQLite的Android API包含一个方法,它返回最后添加的行的ID,但在我使用的包装器中找不到这样的方法
所以问题是:如何以线程安全的方式检索最后添加的行的ID?我们处理这一问题的方式是启动事务,执行插入或更新,执行SELECT()(检索其结果),然后提交事务 这应该是原子的,因为事务处理的性质以及此操作返回当前连接的信息,而不是任何其他到DB的连接的信息