1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #include "databasemanager.h"
- #include <QDebug>
- #include <QDir>
- #include <QMessageBox>
- #include <QSqlError>
- #include <QSqlQuery>
- #include <QStandardPaths>
- #include "global.h"
- #include "logger.h"
- DatabaseManager& DatabaseManager::getInstance() {
- static DatabaseManager instance;
- return instance;
- }
- // 创建一个新的数据库连接
- DatabaseManager::DatabaseManager() : db(QSqlDatabase::addDatabase("QSQLITE")) {
- // 设置SQLite数据库文件路径
- QString appDataPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
- QDir appDataDir(appDataPath);
- if (!appDataDir.exists()) {
- appDataDir.mkpath(".");
- }
- QString dbPath = appDataPath + "/smartmine.db";
- db.setDatabaseName(dbPath);
- if (!db.open()) {
- Logger::getInstance().error(
- QString("SQLite Connected error. path: %1, error: %2").arg(dbPath, db.lastError().text()));
- QMessageBox::critical(nullptr, "错误",
- QString("无法连接数据库, 请联系开发人员。\n 错误: %1").arg(db.lastError().text()));
- throw std::runtime_error("Database connection failed: " + db.lastError().text().toStdString());
- }
- Logger::getInstance().info(QString("SQLite Connected. path: %1").arg(dbPath));
- // 初始化数据库表结构
- initializeTables();
- }
- DatabaseManager::~DatabaseManager() {
- if (db.isOpen()) {
- db.close();
- }
- }
- QSqlDatabase& DatabaseManager::getDatabase() { return db; }
- void DatabaseManager::initializeTables() {
- QSqlQuery query(db);
- // 创建 h_project 表 (SQLite语法,基于提供的MySQL结构)
- QString createHProjectTable = R"(
- CREATE TABLE IF NOT EXISTS h_project (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- uuid TEXT,
- name TEXT,
- company_code TEXT,
- htid TEXT,
- xmbh TEXT,
- operator_name TEXT,
- operator_identity TEXT,
- blaster_name TEXT,
- blaster_identity TEXT,
- lora_address TEXT,
- blast_count TEXT,
- address_uuid TEXT,
- pc_sn TEXT,
- det_sum TEXT,
- file_name TEXT,
- file_url TEXT,
- blast_status TEXT,
- created_at TEXT,
- updated_at TEXT,
- deleted_at TEXT,
- create_by INTEGER,
- update_by INTEGER,
- address_path TEXT,
- deletion_date TEXT
- )
- )";
- if (!query.exec(createHProjectTable)) {
- Logger::getInstance().error(QString("Failed to create h_project table: %1").arg(query.lastError().text()));
- throw std::runtime_error("Failed to create h_project table");
- }
- // 创建索引(可选,提高查询性能)
- query.exec("CREATE INDEX IF NOT EXISTS idx_h_project_uuid ON h_project(uuid)");
- query.exec("CREATE INDEX IF NOT EXISTS idx_h_project_blast_status ON h_project(blast_status)");
- query.exec("CREATE INDEX IF NOT EXISTS idx_h_project_deletion_date ON h_project(deletion_date)");
- Logger::getInstance().info("Database tables initialized successfully");
- }
|