软件环境:
系统: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 <QCoreApplication>
#include <QSqlDatabase>
#include <QStringList>
#include <QString>
#include <QDebug>
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 <QCoreApplication>
#include <QSqlDatabase>
#include <QStringList>
#include <QString>
#include <QDebug>
#include <QSqlError>
#include <QSqlQuery>
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,回头看看官方文档,确认下。