Qt之Oracle数据库驱动编译

一、前提安装

1.需要安装QT5.2.0,本介绍安装的是qt-windows-opensource-5.2.0-mingw48_opengl-x86-offline.exe;

本文安装目录:c:\Qt

2.安装oracle客户端,

本文安装的为 :Oracle10.2客户端

二、编译过程

1.开始菜单中找到Qt 5.2.0 for Desktop

2.打开上面的那个控制台,开始设置相关目录。

进入qt中oci的工程目录

cd %QTDIR%\Qt5.2.0\5.2.0\Src\qtbase\src\plugins\sqldrivers\oci

3.编译

下面的include目录和lib目录的红色加粗部分要根据自己的实际目录去设置

(1) 设置include目录:

set INCLUDE=%INCLUDE%;D:\oracle\product\10.2.0\client_5\oci\include;C:\Qt\Qt5.2.0\Tools\mingw48_32\include  

(2) 设置LIB目录

set LIB=%LIB%;D:\oracle\product\10.2.0\client_5\oci\lib;D:\oracle\product\10.2.0\client_5\oci\lib\msvc

(4) 开始qmake编译过程,qmake oci.pro

(5) 利用gcc的库进行编译: mingw32-make

这样就编译完成了

注意:第2步和第3步是可以没有先后顺序,但是,不能设置第2步之后,关闭控制台重新打开直接进行第3步,否则第5步会编译有问题,可以说是1-5步控制台打开后,一直到完成不能关闭控制台。

编译完成后,会发现C:\Qt\Qt5.2.0\5.2.0\Src\qtbase\plugins编译一个校sqldrivers的文件夹,文件夹下有几个已经编译号的dll

将sqldrivers这个文件夹整体拷贝到C:\Qt\Qt5.2.0\5.2.0\mingw48_32\plugins下边: 

现在就可以使用qt进行oracle数据库的访问了。

例子:

首先在

工程的.pro文件中添加QT += sql 

然后再界面中添加一个按钮和一个文本框:

按钮的信号槽函数为:

此处数据库名、用户名等省略。

void MainWindow::on_pushButton_clicked()
{
    //
    this->db = QSqlDatabase::addDatabase("QOCI");
    this->db.setHostName("127.0.0.1");
    this->db.setUserName("xxx");
    this->db.setPassword("xxx");
    this->db.setDatabaseName("xxx");
    bool ok = db.open();
    if(ok == true)
    {
        qDebug()<<"database link success";
    }
    else
    {
        qDebug()<<"database link fail";
    }
    QSqlQuery query;
    query.exec("select * from nmc_chk_items order by nbbh");
    while(query.next())
    {
        int Nbbh = query.value(0).toInt();
        QString itemid = query.value(1).toString();///< 注意query返回的是Variant类型,需要用toString函数或者toInt函数
        QString itemname = query.value(2).toString();
        qDebug()<<Nbbh<<itemid<<itemname;
        QString strTmp = QString::number(Nbbh,10) + "\t" +itemid+ "\t"+ itemname;
        ui->textEdit->append(strTmp);
    }

    QString strsql = "select * from nmc_chk_items";
    query.exec(strsql);
    QSqlRecord rec = query.record();
    qDebug()<<"Number of columns:" << rec.count();
    for(int i = 0; i < rec.count(); i++)
    {
        qDebug()<<rec.fieldName(i);
    }
    int nidx = rec.indexOf("ITEMNAME");//先使用indexOf函数找到列名的下标,然后根据指定下标查找指定列名的数据
    while (query.next())
    {
        ui->textEdit->append(query.value(nidx).toString());
    }
    /*
    QSqlQuery q("select * from employees");
    QSqlRecord rec = q.record();

    qDebug() << "Number of columns: " << rec.count();

    int nameCol = rec.indexOf("name"); // index of the field "name"
    while (q.next())
        qDebug() << q.value(nameCol).toString(); // output all names
    */

}

头文件需要包含:

运行后的效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值