sqlite - 使用 SQLITE DB 在 qt 5.12.9 中更新查询不起作用(在 for 循环中查询)
问题描述
我是 sqlite 和 DB 的初学者,所以如果这是一个愚蠢的问题,请原谅我,但我厌倦了认为我不知道我是否在这里做一些愚蠢的事情。
我创建了一个带有(label-lineEdit)表单的小部件应用程序,用于名称、家庭(我的表格列,其名称是用户)我输入了名称和家庭我按下确定按钮,一切都很好。之后我意识到如果我删除一行,我的 (id)s 将不会自动进入增量序列(比如增加一个),这太难看了,所以我不得不做点什么。我添加了一个新按钮(名为修复表 id),这个按钮同时生成(行 id = 记录索引 +1)所以这是代码(其他东西,比如连接到数据库、驱动程序和其他东西工作完美,没有任何错误,所以我没有把它们放在这里)但是如果你需要它们请告诉:
void MainWindow::on_fix_table_id_clicked()
{
QSqlQuery q;
q.exec("SELECT * FROM user");
QSqlQueryModel *qm = new QSqlQueryModel();
qm->setQuery(q);
int rows = get_rows()-1;
QSqlRecord qr;
QSqlQuery s;
for(int i = 0 ; i <= rows ; i++){
qr = qm->record(i);
QString num = QString::number(i+1);
s.exec("UPDATE user SET id = '"+num+"' WHERE id = '"+qr.value(0).toInt()+"'");
qDebug() << "UPDATE user SET id = '"+num+"' WHERE id = '"+qr.value(0).toString()+"'";
}
}
get_rows() 方法简单地使用
"SELECT count(1) FROM user"
查询并正常工作,这是输出 (qDebug()) :
"UPDATE user SET id = '1' WHERE id = '3'"
"UPDATE user SET id = '2' WHERE id = '4'"
"UPDATE user SET id = '3' WHERE id = '5'"
"UPDATE user SET id = '4' WHERE id = '6'"
"UPDATE user SET id = '5' WHERE id = '7'"
"UPDATE user SET id = '6' WHERE id = '10'"
但即使在 DB 浏览器中也没有任何效果,也没有任何更新,而且我没有任何问题或错误消息
我在 DB Browser for SQLITE 中测试了这个查询,它们运行良好。
请原谅我糟糕的英语,如果这个问题是低级的或类似的问题:)
解决方案
您应该使用以下 2 列来组织您的表格:
- id (Integer - Unique - Autoincrement) // 你永远不会修改,它是行的 id。
- entryNumber(Integer) // 你可以对这个值做你想做的事
当你 INSERT INTO 时,你的 table id 会自动唯一,entryNumber 可以等于 MAX(entryNumber) + 1
删除一行后,您将使用以下内容更新表:
UPDATE user SET entryNumber = (entryNumber - 1) WHERE id > xx
使用 xx = 您取消的行 ID
推荐阅读
- knative - 尝试为 knative 功能选择一个 web 框架
- c# - 在 Win2d canvasControl 中,如何在需要时多次调用 createResources 事件?
- php - Cloudinary AI 后台清除致命错误
- ios - 尝试使用 for 循环求解方程,然后将其加载到数组中
- curl - cURL - 格式错误的请求,无法将字节...转换为 Unicode
- spring-boot - org.apache.tomcat.util.http.fileupload.FileUploadException:请求被拒绝,因为没有找到多部分边界
- c - 为什么在更改 char 数组的维度后,即使不使用 int 变量 'i' 也会发生变化
- mysql - 执行 Liquibase changeLog 时,触发器在 Amazon Aurora 中不起作用
- python - 无法将多个变量引导到正确的列表中
- angular - Angular Firebase - 从集合中提取数据