QT连接Oracle数据库Driver not loaded Driver not loaded

我在使用QSqlQuery执行sql语句时出错如下:

QSqlQuery::prepare: database not open

"Driver not loaded Driver not loaded"

可知错误为:驱动未加载!

但是程序成功连接到了Oracle数据库(qt需要提前编译oci驱动,并且qt和Oracle的位数一定要相同!!!编译教程可以参考其他博客)

连接Oracle的代码:

void MainWindow::on_Btn_LinkSQL_clicked()
{
    //连接Oracle数据库
       db = QSqlDatabase::addDatabase("QOCI");
       db.setHostName("localhost");
       db.setDatabaseName("ORCL");
       db.setPort(1521);
       db.setUserName("scott");
       db.setPassword("123456");
       if(db.open())
       {
           QMessageBox::StandardButton ok=QMessageBox::information(this, "连接成功","数据库连接成功!");
           ui->Btn_LinkSQL->setEnabled(false);
           ui->statusBar->showMessage(tr("数据库连接状态:已连接"));
       }else
       {
           QMessageBox::StandardButton wrong=QMessageBox::warning(this, "连接失败","请检查数据库账号密码是否正确!");
           ui->statusBar->showMessage(tr("数据库连接状态:未连接"));
       }

}

使用QSqlDatabase::Driver可以查看加载的sql驱动:

打印出来,可以看到是有qsqloci、qsqlocdi的,证明驱动是正常加载的,

那为什么会出现"Driver not loaded Driver not loaded"呢?

问题出现在:

QSqlQuery 对象采用默认的数据库连接,但以防万一,在创建将 db(实例的数据库名称) 作为参数传递的对象(QSqlQuery query(db);),这能强制它针对您的数据库进行查询。

我在打开数据库之前声明了 QSqlQuery 对象。

如果要在不传递数据库连接的情况下执行此操作,请在创建数据库连接后创建查询对象,它应将其作为默认连接(前提是之前没有其他创建的数据库连接)。

所以说,需要先连接数据库后再实例query对象,避免绑定不到数据库对象。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值