gpt4 book ai didi

java - 一个函数中存在多个 execSQL()

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

我编写了一个调度程序应用程序,当用户使用以下命令从互联网更新日程安排时,它会将日程安排数据添加到数据库中:

sqLiteDatabase.execSQL("INSERT OR IGNORE INTO `subject` (`id`, `date`, `start`, `end`, `name`, `room`, `teacher`, `class_id`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", new String[]{id, date, start, end, name, room, teacher, classId});

这工作正常。

但是,可能存在一种情况,在线时间表会更改其内容。因此我会这样编写函数:

sqLiteDatabase.execSQL("DELETE FROM `subject` WHERE `date` = ? AND `class_id` = ?", new String[] {date, classId});
sqLiteDatabase.execSQL("INSERT OR IGNORE INTO `subject` (`id`, `date`, `start`, `end`, `name`, `room`, `teacher`, `class_id`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", new String[]{id, date, start, end, name, room, teacher, classId});

数据被删除得很好,但现在并不是所有内容(只有一行)都被添加回数据库中。所以我的想法是:

删除查询仍在运行,而第二个插入查询也执行

所以,我的问题是。如何等到删除完成才能正确添加新数据?

最佳答案

这不是 execSQL 调用的工作方式;它们始终被正确序列化。

要更新或插入记录,请先尝试更新,然后仅在未找到该记录时插入:

ContentValues cv = new ContentValues();
cv.put(...);
if (sqLiteDatabase.update("subject", cv, "Date = ? AND ClassID = ?",
new String[]{ date, classId }) < 1)
sqLiteDatabase.insertOrThrow("subject", null, cv);

关于java - 一个函数中存在多个 execSQL(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35637305/

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