首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

Qt连接oracle数据库有关问题?求前辈指点

2012-08-24 
Qt连接oracle数据库问题?急求前辈指点。最近刚学QT不久,要用到数据库,但是C++ CUI QT4中这章并没有说怎么配

Qt连接oracle数据库问题?急求前辈指点。
最近刚学QT不久,要用到数据库,但是C++ CUI QT4中这章并没有说怎么配置oracle。
新手求前辈指点

现在我按书上列子连接我的ORACLE10G

#include <QApplication>
#include <QtSql/QSqlDatabase>
#include <QMessageBox>

bool createConnection();

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);

  if(!createConnection())
  return 1;

  return app.exec();
}

bool createConnection()
{
  QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
  db.setHostName("localhost");
  db.setDatabaseName("orcl");
  db.setUserName("system");
  db.setPassword("orcl");
  /*if(!db.open()) {
  QMessageBox::critical(0, QObject::tr("Database Error"),
  db.lastError());
  return false;
  }*/
  return true;
}


但是出现  
QSqlDatabase: QOCI driver not loaded
QSqlDatabase: available drivers: QSQLITE

以前弄ECLIPSE连接ORACLE的时候,之前要配置ECLIPSE。
我猜想是不是Qt连接之前也要配置下? 
希望前辈能指点下我。。。 在此万分感谢!

[解决办法]
这个倒网上查下资料 类似MySQL的配置,你的原因是库没有加载,下面是转载的
————————————————————————————————————

由于vs编程助手(VAssistX)和联合编译(IncrediBuild)这两个究级强大的软件,ms的ide一直是世界上最傻瓜和最强大的ide。
1、下载并安装qt-win-opensource-4.8.0-vs2008.exe,注意要是windows版的
2、下载并安装qt-vs-addin-1.1.10.exe,有了这个插件,用vs2008编写qt简直和qt creator一样方便(甚至更方便)。
下载地址:http://qt.nokia.com/downloads
3、安装MySql5.1,至少要是4以上的版本(3的话,编译驱动时还要修改源代码)。安装时要安装include和lib。
4、编译MySql驱动。
关于这一点要好好说说,qt作为开源软件,由于版权问题,没有提供所有数据库的驱动。而这个驱动可以理解为发动机,由于这个驱动的存在,上层可以提供统一的接口(一样的方向盘,油门),而不用关心具体的数据库类型。
关于增加QT对MySql的支持,可以通过修改配置(命令行 -qt-sql-mysql)并重新编译QT来实现(不推荐,耗时太长)。也可以以插件的形式来实现,而这就需要自己编译mysql的驱动。
编译驱动的方法:
a、通过vs2008的命令行工具(只要能识别qmake、nmake的命令就行)进入到QTDIR/src/plugins/sqldrivers/mysql 目录下。
b、运行命令:
qmake -o Makefile INCLUDEPATH+="C:/MySQL5/include" LIBS+="C:/MySQL5/lib/opt/libmysql.lib" mysql.pro
nmake debug release
其中C:/MySQL5为mysql的安装目录,注意安装路径不要有空格以及中文,否则会出错
 
C:\Qt\4.8.0\src\plugins\sqldrivers\mysql\release 和 C:\Qt\4.8.0\src\plugins\sqldrivers\mysql\debug
里面把qsqlmysql4.dll、qsqlmysql4.lib、qsqlmysqld4.dll、qsqlmysqld4.lib拷到 C:\Qt\4.8.0\plugins\sqldrivers 里面就行了。
到此为止,数据的驱动编译工作完成,不过当你进行测试的时候可能会出现Driver not loaded的错误,主要是程序在编译的过程中找不到libmysql.ddl文件,解决方法为:把C:\MySQL5\lib\opt中的libmysql.ddl文件拷贝在一个系统路径能够找得到的地方!ok任务完成。。。。
下面我们进行测试一下:
[cpp] view plaincopy
1.<span style="font-size:16px;">#include <QtCore/QCoreApplication>
2.#include<QtSql>
3.
4.int main(int argc, char *argv[])
5.{
6. QCoreApplication a(argc, argv);
7. //测试系统中已经能够使用的数据库
8. qDebug() << "Available drivers:";
9. QStringList drivers = QSqlDatabase::drivers();
10. foreach(QString driver, drivers)
11. qDebug() << "\t" << driver;
12. return a.exec();
13.}</span>
测试使用:
#include <QtCore/QCoreApplication>
#include<QtSql>


int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//测试使用sqlite
//QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //添加数据库驱动
//db.setDatabaseName(":memory:"); //数据库连接命名
//if(!db.open()) //打开数据库
//{// 
// return false;
//}


//QSqlQuery query; //以下执行相关QSL语句
//query.exec("create table student(id int primary key,name varchar)");
////新建student表,id设置为主键,还有一个name项
//query.exec("insert into student values(1,'xiaogang')");
//query.exec("insert into student values(2,'xiaoming')");


//query.exec("insert into student values(3,'xiaohong')");
////向表中插入3条记录


//query.exec("select id,name from student where id >= 2");
////查找表中id >=2 的记录的id项和name项的值
//while(query.next()) //query.next()指向查找到的第一条记录,然后每次后移一条记录
//{
// int ele0 = query.value(0).toInt(); //query.value(0)是id的值,将其转换为int型
// QString ele1 =query.value(1).toString();
// qDebug() << ele0 <<ele1 ; //输出两个值
//}
//测试系统中已经能够使用的数据库
//qDebug() << "Available drivers:";
//QStringList drivers = QSqlDatabase::drivers();
//foreach(QString driver, drivers)
//qDebug() << "\t" << driver;
//测试mysql驱动是否使用正常ok
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("mysql");
db.setUserName("root");
db.setPassword("young");
if (!db.open())
qDebug() << "Failed to connect to root mysql admin";
else
qDebug()<<"\n"<<"Connect to root mysql success!";
return a.exec();
}

热点排行