近几天一直在整QT的数据库连接这一块。因为QT是开源的,所以涉及的连接Oracle及Mysql的驱动都必须自己编译生成。通过不断的测试、调试,终于把QT连接Oracle和Mysql的驱动编译生成好了。
QT环境:Qt 4.6.0
打开Qt Command Prompt,开始菜单→程序→QT目录→Qt Command Prompt
生成Oracle驱动的步骤如下:
1、set INCLUDE=%include%;C:/oracle/OCI/include;D:/QT/mingw/include
2、set LIB=%lib%;C:/oracle/OCI/lib/MSVC
3、cd %QTDIR%/src/plugins/sqldrivers/oci
4、qmake oci.pro
5、mingw32-make
在最后一步mingw32-make的时候报一系列的错误如下:
c:/oracle/OCI/include/oratypes.h:97: error: '_int64' does not name a type
c:/oracle/OCI/include/oratypes.h:98: error: '_int64' does not name a type
c:/oracle/OCI/include/oratypes.h:99: error: 'oraub8' does not name a type
c:/oracle/OCI/include/oratypes.h:100: error: 'orasb8' does not name a type
这个错误令人非常头痛,后来才发现是gc++的编译环境的_mingw.h中只定义了如下
# ifndef __int64
# define __int64 long long
# endif
# ifndef __int32
# define __int32 long
# endif
# ifndef __int16
# define __int16 short
# endif
# ifndef __int8
# define __int8 char
# endif
并没有定义_int64,故在编译之前要在oratypes.h中加上如下:
# ifndef _int64
# define _int64 long long
# endif
#define ORAXB8_DEFINED
#ifndef lint
typedef unsigned _int64 oraub8;
typedef signed _int64 orasb8;
typedef oraub8 ub8;
typedef orasb8 sb8;
#else
# define ub8 oraub8
# define sb8 orasb8
# define oraub8 unsigned _int64
# define orasb8 signed _int64
#endif /* !lint */
重新执行生成Oracle驱动的步骤即完成Oracle驱动的生成,生成成功的截图如下:
测试代码如下:
#include
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
如果该驱动存在,打印出来为空白
//QSqlDatabase Connect = QSqlDatabase::addDatabase("QOCI");
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
//依次打印所有驱动
foreach(QString driver, drivers)
qDebug() << driver << "/t";
return a.exec();
}
打印结果如下:
编译生成Mysql驱动比较简单,参杂以下blog及完成Mysql驱动的生成
http://hi.baidu.com/yafeilinux/blog/item/c895e723f474e0f8d6cae22b.html/cmtid/46d0f5832252d19df703a64e