QT连接数据库

      Qt中的QtSQL模块提供了对数据库的支持,该模块中的众多类基本上分为三类:用户接口层,SQL接口层,驱动层。其中,驱动层为具体的数据库和SQL接口层之间提供了底层的桥梁;SQL接口层提供了对数据库的访问;用户接口层实现了将数据库中的数据链接到窗口部件上,这样即使是不熟悉SQL也可以操作数据库。

 一、基本步骤:

1.添加SQL数据库驱动

Qt默认支持一些驱动,也可以添加其他驱动

#include <QApplication>

#include <QSqlDatabase>
#include <QDebug>
#include <QStringList>
 
int main(int argc, char *argv[])
{
  
    QApplication a(argc, argv);
    qDebug() << "Available drivers:";
    QStringList drivers = QSqlDatabase::drivers();      //此处用QSqlDatabase类的静态函数drivers()来获取可用的驱动列表,然后将其遍历输出
    foreach(QString driver, drivers)
        qDebug() << driver;
    return a.exec();
}
 

2.创建数据库连接:创建并打开一个或多个数据库连接(QSqlDatabase支持默认连接,如果应用程序中只需要一个数据库连接,那么使用默认连接是很方便的)。数据库连接使用连接名定义,而不是数据库名。在使用某些成员函数时需要制定一个连接名作为参数。

创建连接对象举例:

QsqlDatabase firstDB=QSqlDatabase::addDatabase("QMYSQL","first");

创建完连接之后,可以在任何地方使用QSqlDatabase::database()静态函数通过连接名称获取指向数据库连接的指针。

下面通过一个具体的例子看一下数据库连接的建立过程:

下面是代码:

#ifndef CONNECTION_H

#define CONNECTION_H
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
static bool createConnection()
{
  
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");               //创建一个连接对象,这里使用的是默认连接
    db.setDatabaseName(":memory:");                            
 /*设置数据库名称时使用了“:memory:”,表明这个是建立在内存中的数据库
也就是说,这个数据库只在程序运行事有效,等程序运行结束时就会将其销毁
 */
    if (!db.open()) {                                      
/*open()函数用来打开数据库连接
如果打开失败则弹出提示对话框
*/
        QMessageBox::critical(0, "Cannot open database",
                              "Unable to establish a database connection.", QMessageBox::Cancel);
        return false;
    }
    QSqlQuery query;
/*使用QSqlQuery创建一个student表,
并插入包含id和name两个字段的三条记录*/
    query.exec("create table student (id int primary key, "
               "name varchar(20))");               //primary key用来指定主键
    query.exec("insert into student values(0, 'LiMing')");
    query.exec("insert into student values(1, 'LiuTao')");
    query.exec("insert into student values(2, 'WangHong')");
    return true;
}
#endif // CONNECTION_H


#include <QApplication>

#include <QSqlDatabase>
#include <QDebug>
#include <QStringList>
#include "connection.h"
#include <QVariant>
 
 
int main(int argc, char *argv[])
{
  
    QApplication a(argc, argv);
 
    // 创建数据库连接
    if (!createConnection()) return 1;
 
    // 使用QSqlQuery查询整张表
    QSqlQuery query;
    query.exec("select * from student");
    while(query.next())
    {
  
        qDebug() << query.value(0).toInt() << query.value(1).toString();
    }
    return a.exec();
}
 

3.创建多个连接

可以同时建立多个连接,但要注意:不同的连接要有不同的连接名

#ifndef CONNECTION_H

#define CONNECTION_H
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
static bool createConnection()
{
  
    // 创建一个数据库连接,使用“connection1”为连接名
    QSqlDatabase db1 = QSqlDatabase::addDatabase("QSQLITE", "connection1");
    db1.setDatabaseName("my1.db");
    if (!db1.open()) {
  
        QMessageBox::critical(0, "Cannot open database1",
                              "Unable to establish
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值