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 QSqlDatabase và QSqlQuery để 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
- 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.
- 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ườngid(khóa chính tự động tăng),ten(văn bản),phongban(văn bản) vàluong(số nguyên).
- 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ụngbindValueđể ràng buộc tham số, sau đó thực thiexec()để chèn dữ liệu.
- Truy vấn dữ liệu:
- Sử dụng
QSqlQueryđể thực thi câu lệnh SQL truy vấn, và sử dụngquery.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.