1,再连接数据库前,我们需要提前创建好我们需要连接的数据库
例如 我创建的数据集名称为:roadmap数据集 然后里面有两个表 分别是roadinfo_tab 与roadmag_tab 然后我们需要记住我们创建的UserID; Password; Server; Port 这些数据对于我们使用qt连接数据库有用
2,首先我们需要首先打开自己的qt软件 查看我们是否有连接postsql数据库的驱动
主要参考这个博主的(14条消息) Qt连接MySQL数据库最详细的教程_joey小天使的博客-CSDN博客_qtmysql
对于我们这个 只需要看如下信息:
主要是这个代码:
qDebug()<<"available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug()<<driver;
首先先执行如下步骤:也即是在pro里面添加QT += sql
然后把上面的代码放在如下图的文件里面,然后运行
需要添加的头文件如下:
#include<QSqlDatabase>
#include<QDebug>
#include<QSqlQuery>
运行后 查看结果里面是否含有"QPSQL" 也即是如下图;
倒数第二个 如有 才能继续进行 如没有
则可以参考这个博主的方法 不过这个博主主要是进行连接 mysql的 大家可以参考一下。
(14条消息) Qt连接MySQL数据库最详细的教程_joey小天使的博客-CSDN博客_qtmysql
3,在查看自己有postsql的驱动器后 我们需要激活下
可以查看这个博主的方法
(14条消息) QT 连接 PostgreSQL 10 驱动问题解决_蓝壳的博客-CSDN博客
操作 如下图:
1,这个步骤上面已经做过 无需在做
在第二个步骤时,你需要先构建你的qt项目得到一个debug文件
2,按照步骤找到教程里说的,把那些文件放在这个debug里面,结果如下:
4,在前3步完成后 第四步就简单了
首先找到 在postsql的安装目录下找到include文件夹,以及lib文件夹,并把下面的两行代码放在qt的项目文件夹下,路径记得改成自己的文件路径 : INCLUDEPATH += "E:/PostgreSQL/10/include" LIBS +="E:/PostgreSQL/10/lib/libpq.lib"
结果如图所示:
下面进行连接数据库,首先第一步先验证直接是否已经可以连接数据库了
代码如下:
由于我的是“UserID=postgres;Password=postgres;Server=127.0.0.1;Port=5432;Database=roadmap”这样的所以对应的连接数据库的代码如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("127.0.0.1"); # 需要改成自己的对应的端口号
db.setDatabaseName("roadmap");#这个是自己创建的数据集 需要改成自己的创建的数据集
db.setPort(5432);#需要改成自己的
db.setUserName("postgres");#用户名 也需要改成自己的
db.setPassword("postgres");#用户密码 需要改成自己对应的
bool ok = db.open();
if (ok){
QMessageBox::information(this, "infor", "success");
} else { QMessageBox::information(this, "infor", "open failed"); }
直接把这个代码放在如下位置,按照下图放置就ok
记得把头文件放好,头文件如下:
#include<QSqlDatabase>
#include<QDebug>
#include<QMessageBox>
#include<QSqlQuery>
#include <libpq-fe.h>#这步如果报错的话 需要查看你的第三步是否完成 如果已经完成仍然报错 先执行一下如下操作 应该就好了
这几个头文件放在这下图对应的位置
然后运行,应该会出现如下结果:
如出现这个结果也即是连接数据库成功!!!
下面是如何取出自己创建的数据集里面的数据:
代码如下:
QSqlQuery query(db);
query.exec("SET NAMES 'Latin1'");//使数据库支持中文(此处很重要)
QString sql=QString("select *from roadinfo_tab"); #这个地方需要改成自己数据集里面的表的名字
bool okopen= query.exec(sql);
if(okopen)
{
QMessageBox::about(NULL, "Save1", "save new database success1");
}
else
{
QMessageBox::about(NULL, "Save1", "error save new database1");
}
query.exec(sql);
while(query.next())
{
int id = query.value(0).toInt(); #0就是指取出你表里面的第一列数据
qDebug()<<QString("id:%1").arg(id); #这个是输出你取出的数据
}
如果你直接复制的话 需要将代码对齐 不然会报错
也即是放在这个位置:
然后运行就可以得出如下结果:
我的数据集roadmap里面的roadinfo_tab表里面的数据如下:
可以对比以上两个数据:可以看出qt运行得出的数据和你创建的数据集里面的数据一样。也即是实现了qt成功连接了postsql,并且也可以取出postsql里面的数据。。。。