Ghi chú học tập: Làm việc với cơ sở dữ liệu SQLite trong Qt

Việc sử dụng cơ sở dữ liệu SQLite trong Qt khá đơn giản, Qt cung cấp các lớp QSqlDatabaseQSqlQuery để xử lý các thao tác kết nối, truy vấn, chèn, cập nhật và xóa dữ liệu. Dưới đây là một ví dụ minh họa cách làm việc với cơ sở dữ liệu SQLite trong Qt.

Mã ví dụ

1. Cấu hình dự án

Đầu tiên, hãy đảm bảo thêm hỗ trợ cho mô-đun SQL Qt vào tệp .pro của dự án:

QT += sql
2. Ví dụ thao tác cơ sở dữ liệu SQLite

Dưới đây là một chương trình C++ đơn giản trong Qt minh họa cách tạo cơ sở dữ liệu SQLite, tạo bảng, chèn dữ liệu và truy vấn dữ liệu.

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
#include <QDebug>

void khoiTaoCSDL()
{
    // Tạo hoặc mở cơ sở dữ liệu SQLite
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("quanlynhanvien.db");

    if (!db.open()) {
        qDebug() << "Lỗi: Không thể kết nối đến cơ sở dữ liệu." << db.lastError();
        return;
    }
    qDebug() << "Đã kết nối cơ sở dữ liệu thành công.";

    // Tạo bảng
    QSqlQuery truyVan;
    QString taoBangQuery = R"(
        CREATE TABLE IF NOT EXISTS nhanvien (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            ten TEXT NOT NULL,
            phongban TEXT,
            luong INTEGER
        )
    )";

    if (!truyVan.exec(taoBangQuery)) {
        qDebug() << "Lỗi: Không thể tạo bảng." << truyVan.lastError();
    } else {
        qDebug() << "Đã tạo bảng thành công.";
    }
}

void chenDuLieu(const QString &ten, const QString &phongban, int luong)
{
    QSqlQuery truyVan;
    truyVan.prepare("INSERT INTO nhanvien (ten, phongban, luong) VALUES (:ten, :phongban, :luong)");
    truyVan.bindValue(":ten", ten);
    truyVan.bindValue(":phongban", phongban);
    truyVan.bindValue(":luong", luong);

    if (!truyVan.exec()) {
        qDebug() << "Lỗi: Không thể chèn dữ liệu." << truyVan.lastError();
    } else {
        qDebug() << "Đã chèn dữ liệu thành công.";
    }
}

void hienThiDuLieu()
{
    QSqlQuery truyVan("SELECT id, ten, phongban, luong FROM nhanvien ORDER BY luong DESC");

    while (truyVan.next()) {
        int id = truyVan.value(0).toInt();
        QString ten = truyVan.value(1).toString();
        QString phongban = truyVan.value(2).toString();
        int luong = truyVan.value(3).toInt();
        qDebug() << "ID:" << id << "Họ tên:" << ten << "Phòng ban:" << phongban << "Lương:" << luong;
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // Khởi tạo cơ sở dữ liệu
    khoiTaoCSDL();

    // Chèn dữ liệu
    chenDuLieu("Nguyễn Văn A", "Kỹ thuật", 15000000);
    chenDuLieu("Trần Thị B", "Kinh doanh", 12000000);
    chenDuLieu("Lê Văn C", "Nhân sự", 10000000);

    // Hiển thị dữ liệu
    hienThiDuLieu();

    return a.exec();
}

Giải thích mã nguồn

  1. Tạo hoặc mở cơ sở dữ liệu:
  • Sử dụng QSqlDatabase::addDatabase("QSQLITE") để thêm một kết nối cơ sở dữ liệu SQLite.
  • db.setDatabaseName("quanlynhanvien.db"); đặt tên tệp cơ sở dữ liệu. Nếu tệp không tồn tại, SQLite sẽ tự động tạo một tệp cơ sở dữ liệu mới.
  1. Tạo bảng:
  • Sử dụng QSqlQuery để thực thi câu lệnh SQL nhằm tạo một bảng có tên là nhanvien. Bảng chứa các trường id (khóa chính tự động tăng), ten (văn bản), phongban (văn bản) và luong (số nguyên).
  1. Chèn dữ liệu:
  • Sử dụng hàm QSqlQuery::prepare để chuẩn bị câu lệnh SQL chèn, và sử dụng bindValue để ràng buộc tham số, sau đó thực thi exec() để chèn dữ liệu.
  1. Truy vấn dữ liệu:
  • Sử dụng QSqlQuery để thực thi câu lệnh SQL truy vấn, và sử dụng query.next() để duyệt qua kết quả. query.value(index) được sử dụng để truy cập giá trị của từng trường trong mỗi hàng.

Kết quả chạy

Khi bạn chạy chương trình này, đầu ra có thể trông như sau:

Đã kết nối cơ sở dữ liệu thành công.
Đã tạo bảng thành công.
Đã chèn dữ liệu thành công.
Đã chèn dữ liệu thành công.
Đã chèn dữ liệu thành công.
ID: 1 Họ tên: Nguyễn Văn A Phòng ban: Kỹ thuật Lương: 15000000
ID: 2 Họ tên: Trần Thị B Phòng ban: Kinh doanh Lương: 12000000
ID: 3 Họ tên: Lê Văn C Phòng ban: Nhân sự Lương: 10000000

Tổng kết

Qua ví dụ này, bạn đã học được cách sử dụng cơ sở dữ liệu SQLite trong Qt, bao gồm các thao tác cơ bản như tạo cơ sở dữ liệu, tạo bảng, chèn dữ liệu và truy vấn dữ liệu. Mô-đun SQL của Qt cung cấp một giao diện đơn giản, giúp bạn dễ dàng tích hợp SQLite hoặc các cơ sở dữ liệu SQL khác vào ứng dụng của mình.

Thẻ: Qt SQLite C++ QSqlDatabase QSqlQuery

Đăng vào ngày 29 tháng 5 lúc 13:00