• 7922阅读
  • 1回复

QT编译MySQL/PostgreSQL驱动 [复制链接]

上一主题 下一主题
离线chenjiuhai
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-14
一.在网上找了很多关于这方面的文章,必须要参考的,就是本坛的XChinux最先发表的帖子,链接如下:http://www.qtcn.org/bbs/read.php?tid=4210&fpage=&toread=&page=1, 接下来对自己的操作进行说明:

二.先讨论下两个数据的选择:
从网上看到很多种说法,个人比较支持选择PostgreSQL,原因除了PGSQL比MYSQL更加自由以外,就是MYSQL的中文支持实在让人头疼,即使驱动加载成功,数据库中的中文还是会乱码,我测试的时候是即使把整个库都改成UTF8仍然无效,本来想参考网上的帖子修改文件,再重新编译驱动,无耐,我的QT4.7.0竟然连那个QCODEC的函数都没找到,我因此也放弃了我最心爱的MYSQL,开始PGSQL测试,当PGSQL驱动加载成功后,中文字符一切正常,没经过任何修改.

三.闲话不说,上酸菜:
1.安装PostgreSQL9.0 WINDOWS版,安装时一定要记住locale选择China->Singapore,不要选择默认,详细安装步骤请自己百度或GOOGLE.

2.添加环境变量的PATH如下:
PATH=(此处省略一万字:因为每个人的应用不同,所以之前的PATH变量也不同,但是,后面的路径是必须添加的路径)C:\WINDOWS\system32;C:\WINDOWS;E:\mysql\bin;E:\postgresql\bin;e:\programfiles\qt\2011.04.02\qt4.7.2\bin;E:\ProgramFiles\Qt\2011.04.02\Qt4.7.2\qmake;E:\ProgramFiles\Qt\2011.04.02\mingw\bin;E:\ProgramFiles\Qt\2011.04.02\mingw\mingw32\bin;E:\mysql\lib;E:\mysql\include;E:\postgresql\bin;E:\postgresql\include

3.命令行提示符下:
  1. E:\
  2.           cd E:\postgresql\lib
  3.           reimp -d libpq.lib
  4.           dlltool -k -d LIBPQ.def -l libpq.a

reimp命令是从附件的包里提取的,请将附件里的文件解压至mingw目录即可.

4.修改E:\ProgramFiles\Qt\2011.04.02\Qt4.7.2\src\plugins\sqldrivers\psql\psql.pro文件,在第二行加入如下内容:

INCLUDEPATH += "E:\postgresql\include"     (注意这里是INCLUDEPATH而不是INCLUDE,在这里吃过亏)
LIBS += "E:\postgresql\lib\libpq.lib"
保存退出.

5.命令行提示符下输入:
  1. cd E:\ProgramFiles\Qt\2011.04.02\Qt4.7.2\src\plugins\sqldrivers\psql
  2. qmake -o Makefile "INCLUDEPATH+=E:\POSTGRESQL\INCLUDE" "LIBS+=E:\POSTGRESQL\LIB\LIBPQ.A" psql.pro
  3. mingw32-make

上面大写的字母要保持大写,同样注意INCLUDEPATH不要少写PATH,否则编译的时候会提示少头文件.

6.确认E:\ProgramFiles\Qt\2011.04.02\Qt4.7.2\plugins\sqldrivers路径下是否有生成的libqsqlpsqld4.a和qsqlpsqld4.dll文件,没有就从E:\ProgramFiles\Qt\2011.04.02\Qt4.7.2\src\plugins\sqldrivers\psql\debug\将此两个文件拷贝到E:\ProgramFiles\Qt\2011.04.02\Qt4.7.2\plugins\sqldrivers目录下.至此大功告成,请按测试程序进行测试.

对以上内容的补充:
1.项目的PRO文件里要包含sql的模块加载,我的PRO内容为:QT       += core gui sql
2.本编译过程使用WIN平台的mingw32-make为编译器.
3.连接函数使用QPSQL加载驱动,连接函数如下:
bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("localhost");
    db.setDatabaseName("accounts");
    db.setUserName("postgres");
    db.setPassword("Aa123456");
    if(!db.open()){
        QMessageBox::critical(0,QObject::tr("Database Error"),db.lastError().text());
        return false;
    }

    QSqlQuery query;
    query.exec("SELECT * FROM bank;");

    return true;
}

以上仅作参考,具体问题仍需变换思路进行,本帖后面请不要提问题,不做回答,抱歉.
[ 此帖被chenjiuhai在2011-04-14 16:54重新编辑 ]
附件: mingw-utils-0.3.tar.gz (1549 K) 下载次数:11
离线wangxiao358

只看该作者 1楼 发表于: 2011-04-15
沙发..
快速回复
限100 字节
 
上一个 下一个