Qt实时监控SQLite数据
- 使用QFileSystemWatcher监视数据库,当数据有更新时触发信号,再重新读取所监视的值
#include <QCoreApplication>
#include <QDebug>
#include <QApplication>
#include <QDir>
#include <QSqlDatabase>
#include <QSqlQuery>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString databasePath = "D:/test6.db";
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(databasePath);
db.open();
if(!db.open())
{
qDebug() << "Error: Failed to connect database.";
}
else
{
qDebug() << "Succeed to connect database.";
}
QSqlQuery query;
query.exec("CREATE TABLE IF NOT EXISTS configuration (key TEXT PRIMARY KEY, value TEXT)");
query.prepare("INSERT INTO configuration (key, value) VALUES (:key, :value)");
query.bindValue(":key", "config_key");
query.bindValue(":value", "config_value");
query.exec("SELECT value FROM configuration WHERE key = 'color'");
if (query.next()) {
QString configValue = query.value("value").toString();
qDebug() << configValue;
}
db.close();
QFileSystemWatcher fileWatcher;
fileWatcher.addPath(databasePath);
QObject::connect(&fileWatcher, &QFileSystemWatcher::fileChanged, [&](const QString& filePath) {
if (filePath == databasePath) {
qDebug() << "Database file changed:" << filePath;
db.open();
if(!db.open())
{
qDebug() << "Error: Failed to connect database.";
}
else
{
qDebug() << "Succeed to connect database.";
}
query.exec("SELECT value FROM configuration WHERE key = 'color'");
if (query.next()) {
QString configValue = query.value("value").toString();
qDebug() << configValue;
}
db.close();
}
});
return a.exec();
}