linux下编译QPSQL驱动程序

软件环境:
系统:redhat5 64位系统
QT库:4.8.6
postgreSQL:11.7

1、安装QT库

如果已经安装安装了QT库,这一步可以跳过。
安装步骤:安装QT库(4.8.6)

2、安装postgreSQL数据库

安装postgreSQL数据库的目的是为了使用它的include和lib。
postgreSQL数据库安装好后,可以不用start。
安装步骤:linux下源码编译安装postgreSQL11.7

3、检查环境变量

vi .bashrc

export QTDIR=/usr/local/Trolltech/Qt-4.8.6
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export PGHOME=/usr/local/pgsql
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH

4、编译QPSQL驱动

进入QPSQL驱动源码目录,就在QT源码目录里。
cd qt-everywhere-opensource-src-4.8.6/src/plugins/sqldrivers/psql

qmake -o Makefile "INCLUDEPATH+=/usr/local/pgsql/include" "LIBS+=-L/usr/local/pgsql/lib -lpq" psql.pro
make
make install

经过上面的三条命令,就生成了QPSQL驱动程序,格式是动态库格式,路径在$QTDIR/plugins/sqldrivers,名字为:libqsqlpsql.so

5、验证QT是否真的有了QPSQL驱动

这里写个demo(QT控制台程序):

#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QStringList ds=QSqlDatabase::drivers();
    foreach(QString drivername,ds)
    {
        qDebug() << drivername;
    }

    return a.exec();
}

程序输出:

"QSQLITE" 
"QPSQL7" 
"QPSQL" 

OK,到目前为止,已经正确得为QT安装了QPSQL驱动程序,下面使用这个驱动进行连接psotgreSQL数据库。

6、使用QPSQL连接postgreSQL数据库

#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString connection="postgreSQL";
    QSqlDatabase db;
    if(QSqlDatabase::contains(connection))
    {
        db=QSqlDatabase::database(connection);
    }
    else
    {
        db=QSqlDatabase::addDatabase("QPSQL",connection);
        db.setHostName("192.168.80.20");
        db.setPort(5432);
        db.setUserName("postgres");
        db.setPassword("postgres");
        db.setDatabaseName("dbtest");
    }

    if(!db.isOpen())
    {
        bool succ=db.open();
        if(!succ)
        {
            qDebug() << "open db failed, cause: " << db.lastError().text();
            a.exit(-1);
        }
        else
        {
            qDebug() << "open db success";
        }
    }

    QString sql="select deptno,dname from dbtest.public.dept";

    QSqlQuery query(db);
    if(!query.exec(sql))
    {
        qDebug() << "exec sql failed, cause: " << db.lastError().text();
    }
    else
    {
        while(query.next())
        {
            int deptno=query.value(0).toInt();
            QString dname=query.value(1).toString();
            qDebug() << deptno << dname;
        }
    }


    db.close();


    return a.exec();
}

程序输出:

This version of PostgreSQL is not supported and may not work.
open db success 
1 "aaa" 
2 "bbb" 
3 "ccc" 
4 "ddd" 

OK,到此,QPSQL驱动程序的编译就全部说完了。
This version of PostgreSQL is not supported and may not work. : 这句输出可能是由于我的QT版本比较老吧(4.8.6),对应的QPSQL驱动源码可能不完全兼容postgreSQL11.7,回头看看官方文档,确认下。

你可能感兴趣的:(QT)