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();
}

执行结果: 

posted @ 2023-11-28 20:06  TechNomad  阅读(925)  评论(0编辑  收藏  举报