【问题标题】:how can I get the id of the last inserted event如何获取最后插入的事件的 id
【发布时间】:2018-12-17 12:09:44
【问题描述】:

首先我在 Xamarin.Android 上使用 SQLite-Net-Pcl

我的问题是,我需要创建一个递归事件, 我需要连接所有这些递归事件(以防有人编辑或删除它们)。 而且我需要使用原始事件的 Id 将其连接到其他人

-> creates new recursive event  
-> gets the id of inserted event  
-> uses that id to connect all recursive events together on a "NumDocConnection"

我的 ID 是自动递增的,并且是主键。

那么,如何获取最后插入的事件的 id?或者这甚至是处理这种情况的好方法?

【问题讨论】:

    标签: android sqlite xamarin xamarin.android sqlite-net


    【解决方案1】:

    如何获取最后插入事件的 id?

    基于int 的primary/auto-inc 值是通过您插入的对象获得的(对象实例在Insert 期间使用新值更新)。

    var newRecord = new Record { SomeString = "StackOverflow" };
    var numofRecordsInserted = conn.Insert(newRecord);
    Console.WriteLine($"Newly inserted id = {newRecord.Key}");
    

    这是处理这种情况的好方法吗

    这取决于您的应用程序。 pri-key/auto-inc 字段确实阻止了生成的 ID 的重用,即直到数据库被重置(通过删除/重新创建或通过 sqlite_sequence 表重置)。

    您是否应该将它用作“外来”键,这里有很多 opinions,有些是,有些不是....就个人而言,如果您从未在您的应用程序外部使用它(即未传输/同步)通过远程 API)如果您了解 SQLite 如何创建它以及何时可以/可以重置它,它可以作为外键运行良好/快速,请参阅链接文档。

    如果 AUTOINCREMENT 关键字出现在 INTEGER PRIMARY KEY 之后,则会更改自动 ROWID 分配算法,以防止在数据库的生命周期内重复使用 ROWID。换句话说,AUTOINCREMENT 的目的是防止重复使用以前删除的行中的 ROWID。

    回复:https://sqlite.org/autoinc.html

    【讨论】:

    • 感谢您抽出宝贵时间,再次感谢您的回答,我仅在本地使用自动递增 ID,我还有另一个字段用作我使用的 Web 服务的键。我最终插入了第一个事件,将最后一个插入的事件放入表中,然后使用作为“NumDocConnection”给出的 Id
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    相关资源
    最近更新 更多