Qt使用SQLite数据库,客户端使用DB Browser

客户端使用 DB Browser,下载地址 Downloads - DB Browser for SQLite (sqlitebrowser.org) 。打开后创建db数据库、表等,很容易操作。

【注意】

1、db文件路径有中文的话,加入 #pragma execution_character_set("utf-8")

2、sql语句对象必须与db数据库关联,否则语句可能不知道操作的哪个db。即 QSqlQuery sql_query(db);

Console项目不加也没问题,但是MainWindow项目会报 QSqlQuery::prepare: database not open 错误。所以推荐加上 QSqlQuery sql_query(db);

3、pro中添加 QT += sql      代码文件中 #include<QtSql>

【Qt操作SQLite代码】

新建Qt Console Application项目,pro中添加 QT += sql

main.cpp内容如下,基本步骤加粗显示。

#include <QCoreApplication>
#include<QtSql> //引入头文件

#pragma execution_character_set("utf-8") //路径有中文

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

    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QSQLITE"); //加载SQLite驱动
    db.setDatabaseName("D:/数据库/school.db");//连接数据库,若无则自动创建
    if (!db.open())//判断数据库是否打开
    {
        qDebug() << "Error: Failed to connect database." << db.lastError();
    }
    else
    {
        QSqlQuery sql_query(db); //sql语句对象与具体的db对象关联
        QString select_all_sql="select * from table1";//查询表table1所有内容
        sql_query.exec(select_all_sql);//执行命令
        while (sql_query.next()) //逐行检索
        { 
            int id=sql_query.value(0).toInt();
            QString name=sql_query.value(1).toString();
            qDebug()<<QString("id:%1 name:%2").arg(id).arg(name);
        }
    }

    return a.exec();
}

 下面关于 插入 和 修改

    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QSQLITE"); //加载SQLite驱动
    db.setDatabaseName("C:/数据库/Data.db");//连接数据库,若无则自动创建
    if (!db.open())//判断数据库是否打开
    {
        qDebug() << "Error: Failed to connect database." << db.lastError();
    }
    else
    {
        QSqlQuery sql_query(db);

        QTime t;   t.start();

        //插入
        sql_query.prepare("insert into result values(?,?,?,?,?)");  //使用占位符 ?
        QString xh="MFA05L";
        QString ph="210704";
        QString xlh="000016";
        QString now=QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss");
        QString Key=xh+ph+xlh;
        sql_query.bindValue(0,xh);  //第1个占位符
        sql_query.bindValue(1,ph);
        sql_query.bindValue(2,xlh);
        sql_query.bindValue(3,now);
        sql_query.bindValue(4,Key);
        if(!sql_query.exec())
        {
            qDebug()<<"Error: Failed to insert."<<sql_query.lastError();

            //若重复插入,则只更新日期
            sql_query.clear();
            sql_query.prepare(QString("update result set 检测日期='%1' where 键='%2'").arg(now).arg(Key));   //等同下2行
            //sql_query.prepare(QString("update result set 检测日期=? where 键='%1'").arg(Key));
            //sql_query.bindValue(0,now);
            if(!sql_query.exec())
            {
                qDebug()<<"Error: Failed to update."<<sql_query.lastError();
            }
        }

        qDebug()<<"耗时"<<t.elapsed();//输出消耗的时间

        //查询
        QString select_all_sql="select * from result";//查询表table所有内容
        sql_query.exec(select_all_sql);//执行命令
        while (sql_query.next()) //逐行检索
        {
            QString key=sql_query.value(3).toString();
            qDebug()<<key;
        }
    }

 【其他内容,参考博客】

qt数据库-QSqlQuery基本操作 - WQVincent (cnblogs.com)

posted @ 2020-02-23 17:55  夕西行  阅读(1574)  评论(0编辑  收藏  举报