目录
五、QSqlDatabase实现 增加,删除,查询,修改数据的实例
前言
本章主要讲解QSqlDatabase基本知识的,以及增删改查的用法;
要是都熟悉了,可以跳过直接浏览下一篇文章(主要是实战,写了一个数据动态库)
QSqlDatabase(2)实例,QTableView显示数据库表数据_Ivy_belief的博客-CSDN博客
一、QSqlDatabase 简介
1、QSqlDatabase是Qt提供的用于管理数据库连接的类,可以连接多种类型的数据库(如MySQL、Oracle、SQLite等),并提供了许多操作数据库的方法。
2、QSqlDatabase可以连接多种类型的数据库,包括:
(1)MySQL
(2)PostgreSQL
(3)SQLite
(4)Oracle
(5)Microsoft SQL Server
(6)IBM DB2
(7)Sybase ASE
(8)ODBC(Open Database Connectivity,开放式数据库连接)等。
3、通过QSqlDatabase,我们可以方便地连接、操作数据库,实现数据的存储和查询。
二、QSqlDatabase的一些常用方法
//常用API:
1. addDatabase(const QString &driverName, const QString &connectionName = QLatin1String(defaultConnection)):添加一个数据库连接,driverName为驱动名称,connectionName为连接名称,默认为defaultConnection。
2. setDatabaseName(const QString &name):设置数据库名称。
3. setUserName(const QString &userName):设置用户名。
4. setPassword(const QString &password):设置密码。
5. setHostName(const QString &hostName):设置主机名。
6. setPort(int port):设置端口号。
7. open():打开数据库连接。
8. close():关闭数据库连接。
9. isOpen():判断数据库是否已经打开。
10. lastError():获取最后一次出错的信息。
11. tables(QSql::TableType type = QSql::Tables):获取数据库中的表名。
12. exec(const QString &query):执行SQL语句。
13. prepare(const QString &query):准备SQL语句。
14. bindValue(const QString &placeholder, const QVariant &val):绑定值。
15. exec():执行准备好的SQL语句。
16. next():获取下一条记录。
17. value(int index):获取指定列的值。
18. value(const QString &name):获取指定列的值。
19. record():获取当前记录。
20. rowCount():获取记录总数。
21. lastInsertId():获取最后插入数据的ID。
22. transaction():开启事务。
23. commit():提交事务。
24. rollback():回滚事务。
三、认识QSqlQuery
1、QSqlQuery 简介:
(1)QSqlQuery封装了在QSqlDatabase上执行的SQL查询中所涉及的创建、导航和检索数据的功能。
(2)QSqlQuery是Qt中的一个类,用于执行SQL语句并处理结果。
(3)它可以执行各种类型的SQL语句,如SELECT、INSERT、UPDATE和DELETE,并且可以返回结果集或受影响的行数。
(4)QSqlQuery还提供了许多方法来访问和处理结果集中的数据,例如next()、value()和record()等。
(5)它是Qt中与数据库交互的重要组件之一。
2、QSqlQuery 常用api
1. exec():执行SQL语句;
2. prepare():准备SQL语句,但不执行;
3. bindValue():将值绑定到SQL语句中的占位符;
4. next():将查询结果集的指针移到下一行;
5. value():获取当前行指定列的值;
6. record():获取查询结果集的元数据,包括列名、类型等;
7. isActive():判断查询是否处于活动状态;
8. lastError():获取最后一次执行查询时发生的错误信息;
9. clear():清除查询结果集和错误信息。
3、用QSqlQuery的一些基本步骤:
// 1. 创建一个QSqlQuery对象
QSqlQuery query;
// 2. 准备SQL语句
QString sql = "SELECT * FROM my_table WHERE id = :id";
// 3. 绑定参数(可选)
query.bindValue(":id", 1);
// 4. 执行查询
query.exec(sql);
// 5. 处理结果
while (query.next())
{
int id = query.value(0).toInt();
QString name = query.value(1).toString();
// 处理数据
}
// 6. 关闭查询
query.finish();
除了SELECT查询,QSqlQuery还可以执行INSERT、UPDATE、DELETE等操作。具体用法可以参考Qt文档或相关教程。
四、使用QSqlDatabase的一些基本步骤
// 1. 引入头文件:
#include <QSqlDatabase>
// 2. 创建一个QSqlDatabase对象:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");//这里我们使用SQLite作为数据库,如果使用其他类型的数据库,需要相应地更改参数。
// 3. 设置数据库连接参数:
db.setDatabaseName("myDatabase.db");//这里设置了数据库文件名为myDatabase.db。
// 4. 打开数据库连接:
if (!db.open())
{
qDebug() << "Failed to open database";// 如果连接失败,可以通过调用db.lastError()获取错误信息。
}
// 5. 执行SQL语句:
QSqlQuery query;
query.exec("SELECT * FROM myTable");// 这里我们执行了一个简单的SELECT语句,并遍历了查询结果。
while (query.next())
{
// 处理查询结果
}
// 6. 关闭数据库连接:
db.close();
以上是使用QSqlDatabase的基本步骤,实际使用中可能会涉及到更多的操作和细节。需要注意的是,QSqlDatabase是一个全局对象,可以在程序的任何地方使用,但需要确保只有一个线程访问它。
五、QSqlDatabase实现 增加,删除,查询,修改数据的实例
下面是一个使用QSqlDatabase进行增加、删除、查询和修改数据的示例:
#include <QCoreApplication>
#include <QtSql>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 建立数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mydatabase.db"); // 数据库文件名
if (!db.open())
{
qDebug() << "Failed to connect to database.";
return -1;
}
// 创建表
QSqlQuery query;
QString createTableQuery = "CREATE TABLE IF NOT EXISTS mytable (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)";
if (!query.exec(createTableQuery))
{
qDebug() << "Failed to create table.";
return -1;
}
// 插入数据
QString insertQuery = "INSERT INTO mytable (name, age) VALUES (:name, :age)";
query.prepare(insertQuery);
query.bindValue(":name", "John");
query.bindValue(":age", 25);
if (!query.exec())
{
qDebug() << "Failed to insert data.";
return -1;
}
// 查询数据
QString selectQuery = "SELECT * FROM mytable";
if (!query.exec(selectQuery))
{
qDebug() << "Failed to select data.";
return -1;
}
while (query.next())
{
int id = query.value("id").toInt();
QString name = query.value("name").toString();
int age = query.value("age").toInt();
qDebug() << "ID:" << id << " Name:" << name << " Age:" << age;
}
// 修改数据
QString updateQuery = "UPDATE mytable SET age = :age WHERE name = :name";
query.prepare(updateQuery);
query.bindValue(":age", 30);
query.bindValue(":name", "John");
if (!query.exec())
{
qDebug() << "Failed to update data.";
return -1;
}
// 删除数据
QString deleteQuery = "DELETE FROM mytable WHERE name = :name";
query.prepare(deleteQuery);
query.bindValue(":name", "John");
if (!query.exec())
{
qDebug() << "Failed to delete data.";
return -1;
}
db.close();
return a.exec();
}
上述示例中,我们首先建立了一个SQLite数据库连接,并创建了一个名为mytable
的表。然后,我们插入一条数据,查询并输出所有数据,接着修改数据和删除数据。
请注意,上述示例中的数据库文件名、表名以及列名需要根据你的实际情况进行修改。