gpt4 book ai didi

c++ - QtSQL双插入数据库

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:26 26 4
gpt4 key购买 nike

问题是当我执行 sql 插入查询时(我正在使用 Qt Creator 和 sqlite),两个新行而不是一个添加到数据库中。

这是代码块

void MainWindow::on_insertButton_clicked(){
db.open();
QString name = ui->nameLineEdit->text();
QString queryString = "INSERT INTO highscores (name, score) VALUES '%1',%2";
QSqlQuery query(queryString.arg(name).arg(score));
query.exec();
}

此代码应仅将值名称和分数插入数据库一次,但在查询执行后插入两个相同的行。

有人知道问题出在哪里吗?

最佳答案

代替

QString queryString = "INSERT INTO highscores (name, score) VALUES '%1',%2";

你应该写

QString queryString = "INSERT INTO highscores (name, score) VALUES ('%1',%2)";

SQL 的INSERT 命令需要数据集列表,在VALUES 之后用逗号分隔,每个在括号中及其列值。

以下命令将一个元组插入表 table:

INSERT INTO table (col1, col2) VALUES (val1, val2);
| col1 | col2 |
+------+------+
| val1 | val2 |

因为您没有将这两个值放在括号中,所以您要求 SQLite 插入两个数据集,每个数据集一个值:

INSERT INTO table (col1, col2) VALUES val1, val2;
| col1 | col2 |
+------+------+
| val1 | |
| val2 | |

(有趣的是,我用我的 SQLite 和 MySQL 安装对此进行了测试。当我完全省略括号时,它们都抛出了一个错误。但这可能取决于版本和您使用的一些选项。 )

永远不要使用QString::arg来填充SQL查询的参数!

(或任何其他字符串构建方法,如连接。)这可能导致 SQL injection .

为了构建带有可变参数的语句,您应该使用 QSqlQuery bound values 提供的SQL 预处理语句 :

QString queryString = "INSERT INTO highscores (name, score) VALUES (?,?)";
QSqlQuery query(queryString);
query.addBindValue(name);
query.addBindValue(score);
query.exec();

请注意,我没有在准备好的语句中引用字符串参数。

关于c++ - QtSQL双插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10774520/

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