Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database QSqlQuery不工作_Database_Qt - Fatal编程技术网

Database QSqlQuery不工作

Database QSqlQuery不工作,database,qt,Database,Qt,我试图向数据库中添加一行,但不起作用。 我的数据库由alwaysdata托管,我使用Qt Creator开发我的程序(打印无误)和MySql查看数据库 通过MySql查询浏览器,我输入: INSERT INTO `mmr` VALUES (NULL,'musictest','albumtest','timetest','datetest'); 它起作用了 但在我的程序中,代码不起作用: void MainWindow::b_clicked(){ QSqlDatabase db = QS

我试图向数据库中添加一行,但不起作用。 我的数据库由alwaysdata托管,我使用Qt Creator开发我的程序(打印无误)和MySql查看数据库

通过MySql查询浏览器,我输入:

INSERT INTO `mmr` VALUES (NULL,'musictest','albumtest','timetest','datetest');
它起作用了 但在我的程序中,代码不起作用:

void MainWindow::b_clicked(){
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setHostName("mysql1.alwaysdata.com");
    db.setDatabaseName("mymusicrecognition_mmr");
    db.setUserName("xxx");
    db.setPassword("yyyy");
    if(!db.open())
        {
            QMessageBox::information(this,"Message","Not connected...");
    }
    else{

        QSqlQuery query;
        query.exec(QString("INSERT INTO `mmr` VALUES (NULL,'%1','%2','%3','%4')")
        .arg("musictest").arg("albumtest").arg("timetest").arg("datetest"));
        QMessageBox::information(this,"Message","Connected !!!");
    }
}
我有消息框“已连接!!!”


这一定是初学者的错误

而不是从args构造QString尝试准备好QSqlQuery并绑定值。


QString对sql转义一无所知。您使用的是Sqlite驱动程序,因此您似乎没有将数据库传递给QSqlQuery,而不是从这里的代码连接到您的主机名Sqlite文件

而不是

QSqlQuery query;
试试这个

QSqlQuery query(db);
我还建议您更进一步,为sql语句创建一个单独的变量,然后将其作为参数与数据库一起传入。例如:

QString insertSql = QString("INSERT INTO `mmr` VALUES (NULL,'%1','%2','%3','%4')")
        .arg("musictest").arg("albumtest").arg("timetest").arg("datetest");
QSqlQuery query(insertSql, db);
这还允许您在尝试运行调试器之前验证调试器中是否有正确构造的sql语句
在此之后,您可以调用exec()并将结果存储在bool中(正如本文中的其他人所提到的)


上面的代码将运行而不会失败。exec()将只返回false,因为它没有任何可以运行sql语句的对象。

您可以检查QSqlQuery::exec的返回值吗?您可以执行类似于
boolsuccess=query.exec(…);如果(!success)qDebug()QSqlError(“1”,“无法执行语句”,“没有这样的表:mmr”)“QSQLITE”驱动程序。。。然后使用一些远程主机名?。你甚至都懒得去查一下“ListReor”,哈哈,这是因为我不知道这些事情,^ ^你甚至不认为我能成为初学者!!作为一个新手问问题是可以的,但请不要因为你还没有弄清楚如何正确使用它就说“QSqlQuery不起作用”。好吧,我全错了,我刚刚发现什么是sqlite,我想使用MySql和alwaysdata上托管的数据库谢谢你的帮助
bool checkSuccess = query.exec();