QT使用QSqlDatabase链接sqlite3

86 篇文章 1 订阅

使用QSqlDatabase、QSqlQuery、QSqlRecord实现sqlite3的链接。
首先要在Pro文件中加载sql模块,如:QT += sql;
然后使用addDatabase来链接库文件,链接类型有如下:
在这里插入图片描述
首先使用创建数据QSqlDatabase对象后,使之成为QqlQuery的句柄。然后使用QSqlQuery的exec来执行数据库语言。
创建数据库

    static const char* DBName = "./test.db";
    QFileInfo file(DBName);
    if(file.exists() == false)
    {
        m_db = QSqlDatabase::addDatabase("QSQLITE");
        m_db.setDatabaseName(DBName); //设置数据库名

        if (!m_db.open())
        {
            qWarning("数据库不能打开");
        }

        QSqlQuery query(m_db);
        ///创建卡号数据库
        query.exec("CREATE TABLE tb_card(cardNum varchar(64) PRIMARY KEY, name varchar(64), job varchar(64))");
        query.clear();

    }
    else
    {
        if (!m_db.isOpen())
        {
            if (m_db.contains(DBName))
                m_db = QSqlDatabase::database(DBName);
            else
            {
                m_db = QSqlDatabase::addDatabase("QSQLITE",DBName);
            }
            m_db.setDatabaseName(DBName); //设置数据库名
        }
    }
    m_db.close();

插入:

    if (!m_db.open())
    {
        qWarning("数据库不能打开");
    }
    QSqlQuery query(m_db);
    QString sqlStr;
    ///打开事务
    sqlStr = "begin;";
    query.exec(sqlStr);

    ///插入
    QString cardNum = QString::number(rand());
    sqlStr = QString("insert into tb_card(cardNum,name,job) values('%1','yjd','神')").arg(cardNum);
    query.exec(sqlStr);

    ///提交事务
    sqlStr = "commit;";
    query.exec(sqlStr);

    m_db.close();

查看:

    if (!m_db.open())
    {
        qWarning()<<"数据库不能打开";
    }
    QSqlQuery query(m_db);
    QString sqlStr;
    sqlStr.append("select * from tb_card");
    bool isSuccess = query.exec(sqlStr);

    QString cardNum, name, job;
    while(query.next()) //query.next()指向查找到的第一条记录,然后每次后移一条记录
    {
        cardNum = query.value(0).toString();
        name = query.value(1).toString();
        job = query.value(2).toString();
        qWarning()<<cardNum<<name<<job<<query.at();
    }

    m_db.close();

获取字段名称:

    if (!m_db.open())
    {
        qWarning()<<"数据库不能打开";
    }
    QSqlQuery query(m_db);
    QString sqlStr;
    sqlStr.append("select * from tb_card");
    bool isSuccess = query.exec(sqlStr);

    QSqlRecord record = query.record();
    query.seek(0);
    for (int i = 0; i < record.count(); ++i) {
        qWarning()<<record.fieldName(i);
    }
    m_db.close();

等等,还可以根据其他指令来操作数据库,如更新,删除,排序。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方忘忧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值