一、前提安装
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
*/
}
头文件需要包含:
运行后的效果: