gpt4 book ai didi

java - 想要使用外键插入辅助表,但当名称相同时不插入主表

转载 作者:行者123 更新时间:2023-12-01 10:25:04 24 4
gpt4 key购买 nike

我对 sqlite3 还很陌生,我正在学习约束,并认为我对我正在做的事情很有用。

我的主表有用户名。包含消息和与发送消息的用户 ID 相对应的外键的辅助表。

我想列出到目前为止已发送消息的所有用户,但在查询时遇到了一个问题:

db.query(USER_TABLE, new String[] {_id, name}, null, null, null, null, null}

我收到重复的用户(名称列出的次数与该用户发送消息的次数相同)。这似乎是一个插入问题。我做了两次插入:一次将用户插入到用户表中,另一次将消息插入到消息表中。

我的目标是在收到消息后查看用户是否已经提交了消息,这样我就不会继续在数据库中插入已经存在的用户。但是,我仍然想沿着与数据库中已有用户相对应的外键插入消息。

我在创建用户表时尝试使用UNIQUE(name),但这也限制了消息的添加。也尝试过使用 insertOrThrow 但没有骰子。

最佳答案

您需要消息行的用户 ID,因此您无法避免查询用户表。如果您没有找到该用户,则您知道必须插入新行:

void insertMessage(string user, string message) {
SQLiteDatabase db = getWritableDatabase();
try {
db.beginTransaction();
try {
long id = DatabaseUtils.longForQuery(db,
"SELECT _id FROM Users WHERE Name = ?",
new String[]{ user });
if (id == -1) {
ContentValues cv = new ContentValues();
cv.put("Name", user);
id = db.insert("Users", null, cv);
}

ContentValues cv = new ContentValues();
cv.put("UserID", id);
cv.put("Text", message);
db.insert("Messages", null, cv);

db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
} finally {
db.close();
}
}

关于java - 想要使用外键插入辅助表,但当名称相同时不插入主表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35390557/

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