Qt之QSqlDatabase的用法
一、常用函数的介绍
QSqlDatabase 类是Qt中用于管理数据库连接的类。它提供了创建、配置、打开和关闭数据库连接的方法。
1.addDatabase 函数
static QSqlDatabase addDatabase(const QString& type, const QString& connectionName = QLatin1String(defaultConnection));
- 该函数用于添加一个数据库连接。
- type 参数指定数据库驱动类型,例如 "QMYSQL"、"QSQLITE" 等。
- connectionName 参数指定连接的名称,默认为 defaultConnection。
- 返回一个 QSqlDatabase 对象,用于后续的数据库配置。
2.setDatabaseName函数
void setDatabaseName(const QString& name);
用于设置数据库连接的名称,通常是数据库文件名或者连接字符串。
3.setHostName、setUserName、setPassword 函数
void QSqlDatabase::setHostName(const QString &host); void QSqlDatabase::setUserName(const QString &name); void QSqlDatabase::setPassword(const QString &password);
用于设置数据库服务器的主机名、用户名和密码。
4.open、isOpen 函数
bool QSqlDatabase::open(const QString &user, const QString &password); bool QSqlDatabase::isOpen() const;
- open 用于打开数据库连接,参数为用户名和密码。
- isOpen 用于检查数据库连接是否已经打开。
5.close函数
void QSqlDatabase::close();
用于关闭数据库连接。
6.lastError函数
QSqlError QSqlDatabase::lastError() const;
用于获取数据库连接的最后一次错误。
二、示例
1.数据表的创建和数据的插入
#include <QCoreApplication> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 添加 SQLite 数据库连接 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); // 设置数据库连接属性 db.setDatabaseName("user.db"); // 设置数据库文件名 // 打开数据库连接 if (db.open()) { qDebug() << "Database connected successfully"; // 创建数据表 QSqlQuery createTableQuery; if (createTableQuery.exec("CREATE TABLE IF NOT EXISTS users_info (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)")) { qDebug() << "Table created successfully"; // 插入数据 QSqlQuery insertDataQuery; if (insertDataQuery.exec("INSERT INTO users_info (name, age) VALUES ('John', 30), ('Alice', 25), ('Bob', 35)")) { qDebug() << "Data inserted successfully"; } else { qDebug() << "Data insertion error:" << insertDataQuery.lastError().text(); } } else { qDebug() << "Table creation error:" << createTableQuery.lastError().text(); } // 关闭数据库连接 db.close(); } else { qDebug() << "Database connection error:" << db.lastError().text(); } return a.exec(); }
输出结果:
2.查询数据表的数据
#include <QCoreApplication> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 添加 SQLite 数据库连接 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); // 设置数据库连接属性 db.setDatabaseName("user.db"); // 设置数据库文件名 // 打开数据库连接 if (db.open()) { qDebug() << "Database connected successfully"; // 查询数据表数据 QSqlQuery query("SELECT * FROM users_info"); // 执行查询 if (query.exec()) { // 打印查询结果 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; } } else { qDebug() << "Query error:" << query.lastError().text(); } // 关闭数据库连接 db.close(); } else { qDebug() << "Database connection error:" << db.lastError().text(); } return a.exec(); }
输出结果:
三、更新数据表的某一条数据
#include <QCoreApplication> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 添加 SQLite 数据库连接 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); // 设置数据库连接属性 db.setDatabaseName("user.db"); // 设置数据库文件名 // 打开数据库连接 if (db.open()) { qDebug() << "Database connected successfully"; // 更新数据表数据 QSqlQuery updateQuery; // 使用参数化查询,防止 SQL 注入攻击 updateQuery.prepare("UPDATE users_info SET age = :newAge WHERE id = :userId"); // 绑定参数 updateQuery.bindValue(":newAge", 60); // 新的年龄 updateQuery.bindValue(":userId", 1); // 待更新的用户ID // 执行更新 if (updateQuery.exec()) { qDebug() << "Data updated successfully"; } else { qDebug() << "Update error:" << updateQuery.lastError().text(); } // 关闭数据库连接 db.close(); } else { qDebug() << "Database connection error:" << db.lastError().text(); } return a.exec(); }
输出结果:
四、删除数据表的某一条数据
#include <QCoreApplication> #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError> #include <QDebug> #include <QCoreApplication> #include <QSqlDatabase> #include <QSqlQuery> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 添加 SQLite 数据库连接 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); // 设置数据库连接属性 db.setDatabaseName("user.db"); // 设置数据库文件名 // 打开数据库连接 if (db.open()) { qDebug() << "Database connected successfully"; // 删除数据表数据 QSqlQuery deleteQuery; // 使用参数化查询,防止 SQL 注入攻击 deleteQuery.prepare("DELETE FROM users_info WHERE id = :userId"); // 绑定参数 deleteQuery.bindValue(":userId", 1); // 待删除的用户ID // 执行删除 if (deleteQuery.exec()) { qDebug() << "Data deleted successfully"; } else { qDebug() << "Delete error:" << deleteQuery.lastError().text(); } // 关闭数据库连接 db.close(); } else { qDebug() << "Database connection error:" << db.lastError().text(); } return a.exec(); }
执行结果: