QT5和SQLite3"无查询无法获取行"

时间:2015-07-11 13:11:20

标签: qt sqlite qt5

我的QT5中的SQLite数据库有问题。我有一张名为" mytable"我试图在那里保存,更改或加载数据。该表看起来像这样(代码):

"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;
    }
}

我仍然得到错误:&#34;没有查询无法获取行&#34;,我一直在寻找答案真的很难但没有任何效果。可能是因为某些包含还是我做错了什么?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您没有正确准备查询。使用bindings之类的:

query.prepare("INSERT INTO mytable(id, name, akcie) VALUES(:id, :name, :akcie)");
query.bindValue(":id", IDcko);
query.bindValue(":name", jmeno);
query.bindValue(":akcie", ak);    

答案 1 :(得分:0)

您没有执行查询。您应该使用如下绑定:

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 +"\')");