插入Qt中的数据库

Insertion into database in Qt

本文关键字:数据库 Qt 插入      更新时间:2023-10-16

我试图将数据插入数据库中的表中,但插入失败。这是我得到的错误:

[Oracle][ODBC][Ora]Ora-0108:并非所有变量都绑定。

这是我的代码:

#include <QtCore/QCoreApplication>
#include <QtSql>
#include<QtDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db= QSqlDatabase::addDatabase("QODBC");
db.setHostName("FCOESL200656336.qu.edu.qa");
db.setDatabaseName("EPQAS");
db.setUserName("SOUAD/testuser");
db.open();

if(db.open())
{
    qDebug() << "Opened!";
     QString sQuery =" insert into writers(W_Id,W_Name,Age,Gender,Nationality,Hand_Used)"
             "Values(:W_Id,:W_Name,:Age,:Gender,:Nationality,:Hand_Used)";
            QSqlQuery qry;
            qry.prepare(sQuery);
             qry.bindValue(":W_Id",3);
             qry.bindValue(":W_Name","fhsf");
             qry.bindValue(":Age",32);
             qry.bindValue(":Gender",'F');
             qry.bindValue(":Nationality","klfds");
             qry.bindValue(":Hand_Used",'R');
      if( !qry.exec(sQuery) )
          qDebug() << qry.lastError().text();
      else
        qDebug( "Inserted!" );
   }
else
{
    qDebug() <<"Connection failed" << db.lastError().text();
}
 db.close();
 return a.exec();
   }

我该如何解决这个问题?

if语句中有一个失败。

if( !qry.exec(sQuery) )

为此,QSqlQuery正在尝试执行sQuery,但在sQuery中您没有绑定任何值。你应该做:

if( !qry.exec() )

因为这个函数将使用绑定值执行您之前准备的查询。整体应该是这样的:

if(db.open())
{
    qDebug() << "Opened!";
     QSqlQuery qry;
     qry.prepare("INSERT INTO writers(W_Id,W_Name,Age,Gender,Nationality,Hand_Used)"
                 "VALUES(:W_Id,:W_Name,:Age,:Gender,:Nationality,:Hand_Used)");
     qry.bindValue(":W_Id",3);
     qry.bindValue(":W_Name","fhsf");
     qry.bindValue(":Age",32);
     qry.bindValue(":Gender",'F');
     qry.bindValue(":Nationality","klfds");
     qry.bindValue(":Hand_Used",'R');
     if( !qry.exec() )
         qDebug() << qry.lastError().text();
     else
         qDebug( "Inserted!" );
}