我有一个问题,我的SQLite数据库QT5。我有表称为"我的表",我试图保存,更改或加载数据在那里。表看起来像这样(CODE):
"mytable" ("id" INTEGER PRIMARY KEY NOT NULL , "name" VARCHAR NOT NULL , "akcie" INTEGER NOT NULL )
然后我尝试像这样使用这个数据库(CODE):
void MainWindow::on_pushButton_save_clicked()
{
QString jmeno, IDcko, ak;
IDcko = ui->lineEdit_ID->text();
jmeno = ui->lineEdit_Name->text();
ak = ui->lineEdit_Akcie->text();
open_connection();
QSqlQuery query;
query.prepare("INSERT INTO mytable(id, name, akcie) VALUES(id= '"+ IDcko +"', name= '"+ jmeno +"', akcie= '"+ ak +"')");
if(query.exec())
{
QMessageBox::information(this, tr("SAVED"), tr("Some text."));
close_connection();
}
else
{
QMessageBox::critical(this, tr("NOT SAVED"), query.lastError().text());
qDebug() << query.lastError().text();
}
}
在同一个文件中,我像这样打开连接(CODE):
bool MainWindow::open_connection()
{
QSqlDatabase database;
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("..\added\test_table.sqlite");
if(!database.open())
{
qDebug() << "not opened connection";
return false;
}
else
{
qDebug() << "opened connection";
return true;
}
}
和我仍然得到错误:"没有查询无法获取行",我一直在寻找答案真的很难,但没有任何工作。可能是因为一些包括或我做错了什么?
提前感谢您的帮助!
您没有正确准备查询。使用如下绑定:
query.prepare("INSERT INTO mytable(id, name, akcie) VALUES(:id, :name, :akcie)");
query.bindValue(":id", IDcko);
query.bindValue(":name", jmeno);
query.bindValue(":akcie", ak);
您没有执行查询。你应该使用这样的绑定:
query.prepare("INSERT INTO mytable(id, name, akcie) VALUES(?, ?, ?)");
query.addBindValue(IDcko);
query.addBindValue(jmeno);
query.addBindValue(ak);
query.exec();
或者,像@Miki提到的,借助query.bindValue(":id", IDCko)
函数。最后一种方法是直接编写查询文本(不需要单独调用query.exec()
:
query("INSERT INTO mytable(id, name, akcie) VALUES(id= '"+ IDcko +"', name= '"+ jmeno +"', akcie= '"+ ak +"')");