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();
    }
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Qt 中使用本地的 SQLite 数据库,需要先安装 SQLite 的驱动程序。以下是使用 Qt 连接 SQLite 数据库的基本步骤: 1. 在 Qt 项目中添加 SQLite 驱动程序。方法是在项目文件 (.pro) 中添加以下行: ``` QT += sql ``` 2. 在代码中引入 QSqlDatabase 类和 QSqlQuery 类: ``` #include <QSqlDatabase> #include <QSqlQuery> ``` 3. 打开数据库连接: ``` QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("mydatabase.db"); if (!db.open()) { qDebug() << "Failed to open database!"; return; } ``` 在这个例子中,我们新建了一个名为 `mydatabase.db` 的 SQLite 数据库,并且成功打开了数据库连接。如果连接失败,会输出一条调试信息。 4. 执行 SQL 查询: ``` QSqlQuery query; query.exec("CREATE TABLE mytable (id INT PRIMARY KEY, name VARCHAR(20))"); query.exec("INSERT INTO mytable (id, name) VALUES (1, 'Alice')"); query.exec("INSERT INTO mytable (id, name) VALUES (2, 'Bob')"); query.exec("SELECT * FROM mytable"); while (query.next()) { int id = query.value(0).toInt(); QString name = query.value(1).toString(); qDebug() << id << name; } ``` 在这个例子中,我们创建了一个名为 `mytable` 的表,并向其中插入了两条记录。然后我们执行了一个 SELECT 查询,遍历了查询结果并输出了每条记录的 id 和 name。 以上就是在 Qt 中连接 SQLite 数据库的基本步骤。你可以根据自己的需要进一步学习和使用 QSqlDatabase 和 QSqlQuery 类的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值