如果存在 QSQLITE 数据库,则根据 qt 中的行值插入或更新

Insert or update if exists a QSQLITE database according to the row values in qt

本文关键字:插入 更新 qt QSQLITE 存在 数据库 如果      更新时间:2023-10-16

在下面的代码中,我创建了一个表"one",它是QSQLITE数据库的一部分,其属性如下面的代码所示。然后我将QStrings a1,b1,c1,d1插入用户输入的表中。现在,仅当表中尚不存在 b1 和 c1 时,软件才必须插入到数据库中。如果表中存在 b1 和 c1,则必须将 d1 列值更新为已存在的 d1 值和新的 d1 值的总和。

[例如:考虑,

(第 1 行( "A B C D" (row2( "水果苹果红 10" (第 3 行( "水果香蕉黄 15">

作为插入到数据库中的行。现在,如果我必须插入另一行"水果苹果红8",则必须将表第一行的D列更新为10 + 8 = "18"。 我该怎么做?

@   
QSqlQuery query;
query.prepare("create table one (A varchar(20), B varchar(30), 
C varchar(30), D integer(10))"); 
query.exec();
query.prepare("insert into one (A,B,C,D)" 
"values(:a,:b,:c,:d)");
query.bindValue(":a",a1);
query.bindValue(":b",b1);
query.bindValue(":c",c1);
query.bindValue(":d",d1);
@

尝试更新现有行。如果这不起作用,则该行不存在,您必须插入它:

query.prepare("UPDATE one SET d1 = d1 + :d WHERE ...");
query.bindValue(...);
query.exec();
if (query.numRowsAffected() == 0) {
query.prepare("INSERT ...");
query.bindValue(...);
query.exec();
}