精华内容
下载资源
问答
  • QT SQLITE 使用

    2020-07-04 20:09:42
    自行百度安装SQLITEQT 首先在QT的工程文件中加入sqlite的支持文件 QT += sql 在qt中操作类和文件类时两个,为了方便统一管理,添加一个新的类作为sql操作类,命名为SqlOperate SqlOperate.c文件 #include ...

    自行百度安装SQLITE和QT

    首先在QT的工程文件中加入sqlite的支持文件

    QT       += sql
    

    在qt中操作类和文件类时两个,为了方便统一管理,添加一个新的类作为sql操作类,命名为SqlOperate

    SqlOperate.c文件

    #include "sqloperate.h"
    
    SqlOperate::SqlOperate(QString dbName)
    {
        QSqlDatabase db;
        //对db数据库进行操作
        if (QSqlDatabase::contains("mysql"))
        {
            //建立数据库连接
            db = QSqlDatabase::database("mysql");
        }
        else
        {
            //创建数据库
            db = QSqlDatabase::addDatabase("QSQLITE","mysql");
        }
         db.setDatabaseName(QString("%1").arg(dbName));
        if(!db.open())
        {
            QMessageBox::warning(0,"警告","数据库打开失败",QMessageBox::Cancel);
             qDebug() << "Error: Failed to connect database." << db.lastError();
    
        }
        qDebug()<<"-----------------sql 已连接-------------------";
        m_db = db;
        m_query = query;
    }
    SqlOperate::~SqlOperate()
    {
        m_db.close();
        qDebug()<<"-----------------sql连接已释放-------------------";
    }
    

    SqlOperate.h文件

    #ifndef SQLOPERATE_H
    #define SQLOPERATE_H
    
    #include <QSqlDatabase>
    #include <QString>
    #include <QSqlQuery>
    #include <QMessageBox>
    #include <QSqlTableModel>
    #include <QTableView>
    
    #include <QSqlError>
    
    #pragma execution_character_set("utf-8")
    
    class SqlOperate
    {
    public:
        SqlOperate(QString dbName);
        ~SqlOperate();
        QSqlQuery m_query;
        QSqlDatabase m_db;
    };
    
    #endif
    

    然后再主函数中创建一个sqloperate 类,

    sqloperate sql(“sqlite数据文件路径”);

    就成功建立连接。
    附上我写的商铺管理系统
    视频演示地址

    展开全文
  • Qt sqlite 使用备忘

    2021-01-23 09:12:00
    在操作过程中,如果QSqlTableModel类型对象,一次性进行大批量数据的插入或者submit大量数据库操作,仅使用默认设置会出现长时间的卡顿现象,可通过以下设置进行改善: 将editStrategy设置为OnManualSubmit(手动...

    一. 创建数据库连接

    1. 同一数据库,在一个线程中,如果创建多个连接,只有一个连接是打开的(虽然一般也不会这样干)
    2. QSqlDatabase类型的对象,只能在创建线程中使用。多线程 访问同一数据库需要创建不同连接(可以在连接名称中加入线程标识,用表记录下各个线程对应的连接,方便下次查询)。

    二. QSqlTableModel(写入速度、增删改)

    • 写入速度问题:在操作过程中,如果QSqlTableModel类型对象,一次性进行插入大量数据到模板(或者提交大量修改到数据库),仅使用默认设置会出现长时间的卡顿现象,可通过以下设置进行改善:
    1. 将editStrategy设置为OnManualSubmit(手动提交修改)
    2. 插入数据时不要使用insertRow,而是同直接通过 insertRows() 批量插入数据
      a. 如果需要对插入的数据进行初始化动作,可以通过监控primeInsert()来实现,每次有新的行数据加入 的时候都会发出该信号
      b. insertRows添加的数据无法通过submit提交到数据库
    3. 应用修改到数据库时,各方法的调用顺序设置为:QSqlDatabase::transaction(),QSqlTableModel::submitAll(),QSqlDatabase::commit()。开启事务是为了让数据库的修改动作批量地执行,同时也可以保护数据库的完整性。
    • 关于修改:创建表时,需要设置PRIMARY KEY,否则会出现多行数据都被修改的情况
    • 关于插入:调用insertRow/insertRows插入行数据后,还需要对新插入的对象进行赋值操作,submit时,才会真正添加到数据库中
    • 关于删除:在OnManualSubmit模式下,删除新增并且未写入数据库的行数据,会立即执行,model中对应的行数据会被删除,可从图形界面(view)观察到。但是,若是删除数据库中已有的行数据,则仅删除命令写入到缓存,只有submitAll,数据库更新之后,才可从图形界面观察到。如果想要在第二种删除动作后,可立即在图形界面看到,但是又不想修改数据库,则除了调用QSqlTableModel本身的removeRow/removeRows外,还要自行处理model的数据(通过调用beginRemoveRows/
      endRemoveRows删除model中的行数据。并且要做好行号记录,以免与QSqlTableModel缓存中记录的操作有出入)
    • 信息补充
    1. SQLite Transaction

    2. SQLite Transaction中文

    3. QSqlTableModel Class

    4. 截取的Transaction部分介绍
      在这里插入图片描述

    5. 截取的insertRows , primeInsert 介绍在这里插入图片描述在这里插入图片描述

    6. QSqlTableModel::removeRows源码

    /*!
        Removes \a count rows starting at \a row. Since this model
        does not support hierarchical structures, \a parent must be
        an invalid model index.
    
        When the edit strategy is OnManualSubmit, deletion of rows from
        the database is delayed until submitAll() is called.
    
        For OnFieldChange and OnRowChange, only one row may be deleted
        at a time and only if no other row has a cached change. Deletions
        are submitted immediately to the database. The model retains a
        blank row for successfully deleted row until refreshed with select().
    
        After failed deletion, the operation is not reverted in the model.
        The application may resubmit or revert.
    
        Inserted but not yet successfully submitted rows in the range to be
        removed are immediately removed from the model.
    
        Before a row is deleted from the database, the beforeDelete()
        signal is emitted.
    
        If row < 0 or row + count > rowCount(), no action is taken and
        false is returned. Returns \c true if all rows could be removed;
        otherwise returns \c false. Detailed database error information
        can be retrieved using lastError().
    
        \sa removeColumns(), insertRows()
    */
    bool QSqlTableModel::removeRows(int row, int count, const QModelIndex &parent)
    {
        Q_D(QSqlTableModel);
        if (parent.isValid() || row < 0 || count <= 0)
            return false;
        else if (row + count > rowCount())
            return false;
        else if (!count)
            return true;
    
        if (d->strategy != OnManualSubmit)
            if (count > 1 || (d->cache.value(row).submitted() && isDirty()))
                return false;
    
        // Iterate backwards so we don't have to worry about removed rows causing
        // higher cache entries to shift downwards.
        for (int idx = row + count - 1; idx >= row; --idx) {
            QSqlTableModelPrivate::ModifiedRow& mrow = d->cache[idx];
            if (mrow.op() == QSqlTableModelPrivate::Insert) {
                revertRow(idx);//!!!!!!删除新增并且未写入数据库的行数据,直接回滚,并发出beginRemoveRows信号
            } else {
                //!!!!!!!!!删除数据库中已有的行数据,则仅将删除命令写入到缓存,不执行model数据的删除动作
                if (mrow.op() == QSqlTableModelPrivate::None)
                    mrow = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Delete,
                                                              QSqlQueryModel::record(idx));
                else
                    mrow.setOp(QSqlTableModelPrivate::Delete);
                if (d->strategy == OnManualSubmit)
                    emit headerDataChanged(Qt::Vertical, idx, idx);
            }
        }
    
        if (d->strategy != OnManualSubmit)
            return submit();
    
        return true;
    }
    
    void QSqlTableModelPrivate::revertCachedRow(int row)
    {
        Q_Q(QSqlTableModel);
        ModifiedRow r = cache.value(row);
    
        switch (r.op()) {
        case QSqlTableModelPrivate::None:
            Q_ASSERT_X(false, "QSqlTableModelPrivate::revertCachedRow()", "Invalid entry in cache map");
            return;
        case QSqlTableModelPrivate::Update:
        case QSqlTableModelPrivate::Delete:
            if (!r.submitted()) {
                cache[row].revert();
                emit q->dataChanged(q->createIndex(row, 0),
                                    q->createIndex(row, q->columnCount() - 1));
            }
            break;
        case QSqlTableModelPrivate::Insert: {
                QMap<int, QSqlTableModelPrivate::ModifiedRow>::Iterator it = cache.find(row);
                if (it == cache.end())
                    return;
                q->beginRemoveRows(QModelIndex(), row, row);
                it = cache.erase(it);
                while (it != cache.end()) {
                    int oldKey = it.key();
                    const QSqlTableModelPrivate::ModifiedRow oldValue = it.value();
                    cache.erase(it);
                    it = cache.insert(oldKey - 1, oldValue);
                    ++it;
                }
                q->endRemoveRows();
            break; }
        }
    }
    
    展开全文
  • QT SQLITE使用事务批量插入数据

    千次阅读 2017-04-24 15:14:30
    方法一:  dbT1.transaction(); inQry.prepare("insert into datatable values (?,?,?)"); while(!ReadDat.atEnd()) { strTextData = ReadDat.readLine(); listIndex datIndex;

    连接数据库、建表结构

        QsqlDatabase dbT1 = QSqlDatabase::addDatabase("QSQLITE");	//连接数据库
        dbT1.setDatabaseName("t1data");	                        //设置数据库名称
        dbT1.open(); 						//打开数据库
        //建表
        datQry.exec("create table datatable (tIndex int primary key, "
                    "tTimStamp int, "
                    "tDistance varchar(20))");


    方法一,批处理方式:


     dbT1.transaction();	 	//开始启动事务
    
    
       inQry.prepare("insert into datatable values (?,?,?)");
       while(!ReadDat.atEnd())
       {
           strTextData = ReadDat.readLine();
           listIndex << datIndex;
           tmStamp << tmStampCnt;
           dtData << strTextData;
           datIndex++;
           DatWin->append(strTextData);
       }
       //绑定数据,顺序应与表结构字段数据一致
       inQry.addBindValue(listIndex);	//绑定数据
       inQry.addBindValue(tmStamp);		//绑定数据
       inQry.addBindValue(dtData);		//绑定数据
    
    
       inQry.execBatch();		//进行批处理操作
    
    
       dbT1.commit();		//提交事务,此时打开数据库文件执行SQL语句
      
       //不加下面三句,重复操作上面语句时,数据库不会有新的添加
       //因为作为主键的listIndex内有原数据,此时数据库不会保存主键值重复的内容
       listIndex.clear();
       tmStamp.clear();
       dtData.clear();


    方法二,占位符方式:


       dbT1.transaction();
       while(!ReadDat.atEnd())
       {
           strTextData = ReadDat.readLine();
           inQry.prepare("insert into datatable(tIndex, tTimStamp, tDistance)"
                             "values(:tIndex, :tTimStamp, :tDistance)");
            inQry.bindValue(0,datIndex);
            inQry.bindValue(1,tmStampCnt);
            inQry.bindValue(2,strTextData);
            inQry.exec();
            datIndex++;
            DatWin->append(strTextData);
       }
       dbT1.commit();


    展开全文
  • Qt SQLite

    2019-01-22 16:25:00
    1. Qt 操作 SQLite 文件跟本地文件是一致的套路。频繁使用 exec 相当一次次的访问... Qt SQLite 支持事务,使用 transaction() 和 commit() ,毫秒级的速度。 转载于:https://www.cnblogs.com/hbrw/p/10304512.html...

        

       1. Qt 操作 SQLite 文件跟本地文件是一致的套路。频繁使用 exec 相当一次次的访问硬盘文件,速度十分缓慢。
      
       2. Qt SQLite 支持事务,使用 transaction() 和 commit() ,毫秒级的速度。

    转载于:https://www.cnblogs.com/hbrw/p/10304512.html

    展开全文
  • Qt sqlite 数据库的使用

    2020-10-07 11:41:18
    Qt5以上版本可以直接使用SQLite。 2.sqlite使用 修改.pro文件,添加sql QT += sql 添加头文件 #include "QSqlDatabase" #include "QSqlQuery" #include "QSqlError" #include "QDebug" void MainWindow::...
  • qt sqlite 触发器 使用

    千次阅读 2011-08-08 13:07:00
    --------SQLite触发器------------------------------------------------- 1 .删除   CREATE TRIGGER   triggername   AFTER   DELETE   ON mainTableName   FOR  EACH ROW   BEGIN   DELETE  ...
  • qt sqlite 的初步使用

    千次阅读 2010-07-22 21:11:00
    项目文件 pro 中加QT += sql一、包含头文件 #include 二、声明使用sqlite数据库 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");三、打开数据库 db.setDatabaseName("MyDB"); // 数据库名与路径, 此时...
  • Qt使用sqlite

    2020-11-11 20:16:46
    sqlite是轻量级数据库,Qt内嵌该数据库,很方便使用Qt使用sqlite步骤 创建数据库sqlite连接。 创建表(如有表,进行更新)。 完成数据库初始化设置。 数据库CRUD操作。 Qt程序实例 void testSql() { //...
  • Qt使用SQLite数据库

    2018-06-23 11:11:41
    Qt使用SQLite数据库,具体实现,封装成为一个类使用
  • 经过上两周的QT实训,整合出了QT可能链接数据库错误的一些原因(都是我犯过的一些错误,真的血的教训),在这里发给大家,希望可以帮助到大家哈(我用的是SQLite数据库)。 1.没有在你的pro文件里写入QT += sql语句...
  • Qt使用Sqlite

    千次阅读 2018-09-26 16:24:20
    Qt的sql中自带了sqlite3以及之前版本的sqlite...接下来就可以使用sqlite了,看代码示例: #include &lt;QDebug&gt; #include &lt;QSqlDatabase&gt; #include &lt;QSqlDriver&gt; #inclu...
  • QT自带的Sqlite引擎是不支持加密的,所以自己实现了能够加密的Sqlite引擎,继承QSqlDriver实现的,与其他数据库一样使用QSqlDatabase进行操作,与QT自带数据库操作保持一致。文件包含项目源码及测试代码。
  • QT 使用SQLite3

    2016-06-09 15:27:04
    Qt 调用SQLITE3数据路,亲测有效
  • QT使用SQLite

    2018-11-07 23:07:00
    QT的widget中用tableview显示sqlite数据库表中的内容。 用QTcreator创建一个基于Widget类的窗口,再拖一个tableview到widget中,保存.  1.在widget.h中增添头文件:QtSql/qsql.h、QtSql/QsqlDatabase、QtSql/...
  • Qt使用SQLite

    2016-04-14 10:37:00
    近距离接触SQLite发现有很多不错的特性,最主要的是免安装、单文件,对于一般的管理系统和信息索引来说很合适,之前在.net中使用过SQLServer,所以SQLite很好接触,SQL是数据库通用语言,所以尝试着在Qt-Sqlite环境...
  • 这几天做项目真好要用到数据库,当然不二的选择就是用Qt自带的sqlite数据库,来做,于是我在xp系统用Qtcreator创建了一个简单的小程序,来做一下实验,运行起来试下面这个样子的 点击一下查看按钮,会添加一条...
  • QTSQLite使用实例

    2017-07-07 15:53:40
    本问写了一个,QT下连接SQLite数据库,并且操作它的demo,希望对初学者有帮助,感谢网友分享此代码
  • qt使用sqlite数据库

    2019-05-19 20:55:33
    qt使用数据库时,如果不是很复杂的逻辑,可以考虑使用sqlitesqlite是一个轻量数据库,广泛应用于移动设备上,并且它的数据库整个放在一个db后缀的文件中,可以直接拷贝进行数据库的移动。 笔者原来使用mysql...
  • qt使用sqlite

    2021-03-08 09:12:28
    sql语句学习链接:https://www.w3school.com.cn/sql/sql_syntax.asp qt使用sqlite教程 0、准备 1、 QSqlQuery与QSqlDatabase如何关联 2、建立并打开数据库: 3、创建表格`TableUserAccount` 4、插入数据 5、修改数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 891
精华内容 356
关键字:

qtsqlite使用