gpt4 book ai didi

database - 如何从 SQLite 表中检索最后一个自动增量 ID?

转载 作者:IT王子 更新时间:2023-10-29 06:16:55 27 4
gpt4 key购买 nike

我有一个包含列 ID(主键,自动增量)和内容(文本)的消息表。
我有一个用户表,其中包含列用户名(主键、文本)和哈希。
一条消息由一个发送者(用户)发送给多个接收者(用户),一个接收者(用户)可以有很多消息。
我创建了一个包含两列的表 Messages_Recipients:MessageID(指 Messages 表的 ID 列)和 Recipient(指 Users 表中的用户名列)。此表表示收件人和消息之间的多对多关系。

所以,我的问题是这个。新消息的 ID 将在存储到数据库后创建。但是我如何保存对刚刚添加的 MessageRow 的引用以检索这个新的 MessageID?
当然,我总是可以在数据库中搜索添加的最后一行,但这可能会在多线程环境中返回不同的行?

编辑:据我了解,对于 SQLite,您可以使用 SELECT last_insert_rowid()。但是如何从 ADO.Net 中调用这个语句呢?

我的持久性代码(消息和消息接收者是数据表):

public void Persist(Message message)
{
pm_databaseDataSet.MessagesRow messagerow;
messagerow=messages.AddMessagesRow(message.Sender,
message.TimeSent.ToFileTime(),
message.Content,
message.TimeCreated.ToFileTime());
UpdateMessages();
var x = messagerow;//I hoped the messagerow would hold a
//reference to the new row in the Messages table, but it does not.
foreach (var recipient in message.Recipients)
{
var row = messagesRecipients.NewMessages_RecipientsRow();
row.Recipient = recipient;
//row.MessageID= How do I find this??
messagesRecipients.AddMessages_RecipientsRow(row);
UpdateMessagesRecipients();//method not shown
}

}

private void UpdateMessages()
{
messagesAdapter.Update(messages);
messagesAdapter.Fill(messages);
}

最佳答案

另一种选择是查看系统表 sqlite_sequence。如果您使用自动增量主键创建任何表,您的 sqlite 数据库将自动拥有该表。此表供 sqlite 跟踪自动增量字段,以便即使在您删除某些行或某些插入失败后它也不会重复主键(在此处阅读更多信息 http://www.sqlite.org/autoinc.html)。

因此,使用此表还有一个额外的好处,即即使您插入了其他内容(当然是在其他表中!),您也可以找到新插入项目的主键。在确保插入成功后(否则你会得到一个错误的数字),你只需要做:

select seq from sqlite_sequence where name="table_name"

关于database - 如何从 SQLite 表中检索最后一个自动增量 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2127138/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com