qt SQLite学习记录

1. 查看qt中数据库的驱动的类型的支持

QStringList drivers = QSqlDatabase::drivers();//获取qt中所支持的数据库驱动类型

    foreach(QString driver,drivers)
    {
        qDebug()<<driver;
    }
 

在这里插入图片描述

2. Qt SQL 模块包含的主要类的功能介绍

Qt SQL 模块包含了一些主要的类,用于在 Qt 应用程序中实现数据库操作。以下是几个主要类的功能介绍:

  1. QSqlDatabase:用于表示数据库连接的类。通过 QSqlDatabase 类,可以建立和管理数据库连接,并执行数据库操作。

  2. QSqlQuery:用于执行 SQL 查询的类。通过 QSqlQuery 类,可以执行各种 SQL 查询语句,如 SELECT、INSERT、UPDATE、DELETE 等,并获取查询结果。

  3. QSqlTableModel:用于绑定数据库表格的类。通过 QSqlTableModel 类,可以将数据库表格和 Qt 的模型/视图框架相结合,实现数据的展示和编辑。

  4. QSqlRelationalTableModel:用于处理关系型数据库表格的类。通过 QSqlRelationalTableModel 类,可以处理包含外键关系的数据库表格,并在 UI 中显示相关联的数据。

  5. QSqlQueryModel:用于执行 SQL 查询并在视图中显示结果的类。通过 QSqlQueryModel 类,可以执行 SQL 查询并将结果集显示在 Qt 的视图组件中,如 QTableView、QListView 等。

  6. QSqlRelationalDelegate:用于管理数据库表格中外键列的类。通过 QSqlRelationalDelegate 类,可以为外键列提供自定义的展示和编辑行为。

  7. QSqlError:表示数据库错误信息的类。通过 QSqlError 类,可以获取数据库操作时可能发生的错误信息,便于进行错误处理和调试。

总的来说,Qt SQL 模块提供了一系列的类和方法,方便开发者在 Qt 应用程序中实现数据库操作和数据展示功能。

3. QSqlDatabase操作主要接口

方法 描述
addDatabase(const QString &type) 添加一个数据库连接,并指定数据库类型。
removeDatabase(const QString &name) 移除指定名称的数据库连接。
database(const QString &connectionName = defaultConnection) 返回指定名称的数据库连接。
contains(const QString &connectionName) 检查是否存在指定名称的数据库连接。
setDatabaseName(const QString &name) 设置连接的数据库名称。
setUserName(const QString &name) 设置连接的用户名。
setPassword(const QString &password) 设置连接的密码。
open() 打开数据库连接。
isOpen() 检查数据库连接是否打开。
close() 关闭数据库连接。
tables(QSql::TableType type = Tables) 返回数据库中的表格列表。
exec(const QString &query) 执行 SQL 查询语句。
commit() 提交数据库事务。
rollback() 回滚数据库事务。
lastError() 返回最后一个数据库操作的错误信息。
  • 范例示范
QSqlDatabase db;//对于一个工程而言,该类对象就相当于是一个数据库,所以再工程中只使用一个对象即可
//连接成功,返回一个数据库对象
    db=QSqlDatabase::addDatabase("QSQLITE");//告诉系统,连接的数据库是sqlite3数据库

    db.setDatabaseName("test.db");//数据库文件后缀为.db

    //如果想要进一步操作数据库,那么,就必须要进行数据库打开操作

    if(!db.open())
    {
        qDebug()<<"Error falied to open"<<db.lastError();
    }

4. QSqlQuery 操作主要接口

方法 描述
bindValue(int pos, const QVariant &val) 绑定参数到查询中的指定位置。
boundValue(int pos) 返回查询中指定位置的绑定参数值。
exec() 执行当前设置的查询。
exec(const QString &query) 执行指定的 SQL 查询语句。
setForwardOnly(bool forward) 设置查询是否只能向前滚动。
first() 移动到查询结果的第一条记录。
last() 移动到查询结果的最后一条记录。
next() 移动到查询结果的下一条记录。
previous() 移动到查询结果的上一条记录。
seek(int index, bool relative) 移动到查询结果中的指定位置。
value(int index) 返回当前记录中指定字段的值。
record() 返回当前记录的字段值。
nextResult() 移动到多结果查询的下一个结果。
finish() 完成多结果查询。
isActive() 检查查询是否处于活动状态。
isValid() 检查查询是否有效。
isSelect() 检查查询是否为 SELECT 查询。
isForwardOnly() 检查查询是否只能向前滚动。
lastError() 返回最后一个查询操作的错误信息。
  • 范例示范
//连接成功,返回一个数据库对象
    db=QSqlDatabase::addDatabase("QSQLITE");//告诉系统,连接的数据库是sqlite3数据库

    db.setDatabaseName("test.db");//数据库文件后缀为.db

    //如果想要进一步操作数据库,那么,就必须要进行数据库打开操作

    if(!db.open())
    {
        qDebug()<<"Error falied to open"<<db.lastError();
    }


    //访问数据库的主要操作包括:创建表  向数据库表中插入数据  删除数据  更新数据  查询数据

    //对于数据库中的表,通常只需要创建一次,其他的操作可以重复
    QSqlQuery query;//在创建对象时,系统会自动完成跟数据库的关联

    //定义一条创建表的sql语句   表名:staff  表中的字段: id name age
    QString sqlCreate = QString("create table staff(id integer primary key autoincrement,"
                                "name varchar(20),"
                                "age int;");

    query.exec(sqlCreate);

5. 插入查询操作

  • 创建表
//连接成功,返回一个数据库对象
    db=QSqlDatabase::addDatabase("QSQLITE");//告诉系统,连接的数据库是sqlite3数据库

    db.setDatabaseName("test.db");//数据库文件后缀为.db

    //如果想要进一步操作数据库,那么,就必须要进行数据库打开操作

    if(!db.open())
    {
        qDebug()<<"Error falied to open"<<db.lastError();
    }


    //访问数据库的主要操作包括:创建表  向数据库表中插入数据  删除数据  更新数据  查询数据

    //对于数据库中的表,通常只需要创建一次,其他的操作可以重复
    //QSqlQuery query;//在创建对象时,系统会自动完成跟数据库的关联
#if 0
    //定义一条创建表的sql语句   表名:staff  表中的字段: id name age
    QString sqlCreate = QString("create table staff(id integer primary key autoincrement,"
                                "name varchar(20),"
                                "age int);");

    if(!query.exec(sqlCreate))
    {
        qDebug()<<"create table error"<<db.lastError();
    }
#endif
      QSqlQuery query;//在创建对象时,系统会自动完成跟数据库的关联
  • 插入操作
    //插入操作
    QString sqlInsert = QString ("INSERT INTO staff(id ,name,age) VALUES(2,'张三',20);");

    if(!query.exec(sqlInsert))
    {
        qDebug()<<"insert data error"<<db.lastError();
    }
  • 查询操作
    QString sqlSelect =QString ("select *from staff;");

    if(!query.exec(sqlSelect))
    {
        qDebug()<<"select data error"<<db.lastError();
    }else
    {
        while(query.next())
        {
           qDebug()<< query.value("id").toInt();
           qDebug()<< query.value("name").toString();
           qDebug()<< query.value("age").toInt();
        }
    }

6. 删除更新操作

  • 删除操作
//删除操作

    QSqlQuery query;

    QString sqlDelete = QString("delete from staff where id = 2;");

    if(!query.exec(sqlDelete))
    {
        qDebug()<<"delete data error"<<db.lastError();
    }
  • 更新操作
//更新数据操作
    QSqlQuery query;
    QString sqlUpdate = QString("update staff set name = '李四' where id =1;");
    if(!query.exec(sqlUpdate))
    {
        qDebug()<<"update data error"<<db.lastError();
    }

相关推荐

  1. 学习记录————

    2024-07-22 05:10:01       59 阅读
  2. mysql学习记录

    2024-07-22 05:10:01       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 05:10:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 05:10:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 05:10:01       45 阅读
  4. Python语言-面向对象

    2024-07-22 05:10:01       55 阅读

热门阅读

  1. 【C++】C++内存泄漏介绍及解决方案

    2024-07-22 05:10:01       15 阅读
  2. 后台接口的配置

    2024-07-22 05:10:01       15 阅读
  3. Optional 中 map 和 flatMap 区别是啥?

    2024-07-22 05:10:01       15 阅读
  4. 实习手计(4):月末碎碎念!

    2024-07-22 05:10:01       12 阅读
  5. Nginx详细配置(最佳实践)

    2024-07-22 05:10:01       17 阅读
  6. 信息系统安全保护等级调整的流程

    2024-07-22 05:10:01       15 阅读
  7. Netty SSL/TLS

    2024-07-22 05:10:01       19 阅读
  8. C语言排序算法

    2024-07-22 05:10:01       12 阅读
  9. 如何使用Python进行数据分析

    2024-07-22 05:10:01       17 阅读
  10. filebeat把日志文件上传到Es中配置(ES8版本)

    2024-07-22 05:10:01       13 阅读
  11. 使用 node --inspect 命令调试js文件执行

    2024-07-22 05:10:01       15 阅读
  12. c语言(7.21)

    2024-07-22 05:10:01       15 阅读