之前一直使用的是mysql数据库,这次开发中使用到了SQList数据库,因为底层封装不是我写的,是我老大写的,都是关于数据库的接口啥的,我调用就行。就在昨天,程序突然查不到数据了,也没有报错,数据库也有呀,搞了半天,我就进底层封装查看,原来没有做判断,判断这个SQList数据库是否存在。
SQList数据库和别的数据库不一样,如mysql,它的特性是,没有数据库就自己建立一个数据库,然后连接上去。导致也没有报错啥的,结果查询不到数据。
SQList数据库就像一个文件一样,所以要得在再打开它之前先看它存不存在或者为不为空,在进行连接。这样子就没有问题了,如下
DBManager::DBManager() : m_sqliteDB(eDbType::SQLite)
{
QString settingsFileName = QCoreApplication::applicationDirPath() + "/config/WebConfig.ini";
QSettings settings(settingsFileName, QSettings::IniFormat);
m_dbType = settings.value("database/dbType", 1).toInt();
m_hostName = settings.value("database/hostName", "127.0.0.1").toString();
m_dbName = settings.value("database/dbName", "stms").toString();
m_userName = settings.value("database/userName", "root").toString();
m_password = settings.value("database/password", "123456").toString();
m_port = settings.value("database/port", 3306).toInt();
//检查程序执行路径下的数据库是否存在
if(datebaseExists(m_dbName)) {
// 如果使用sqlite直接返回一个单对象即可,不需要重新生成
m_sqliteDB.SetDb(m_hostName, m_dbName, m_userName, m_password, m_port);
}
}
bool AppRunTime::datebaseExists(QString dbName)
{
SimpleLogLib::writeLog("正在加载站端数据库文件" + dbName, "ValWellElectricTools", __FILE__, __LINE__);
//判断SQLite数据库文件是否存在,不存在将错误信息写入文件,返回
if(!QFile::exists(dbName))
{
SimpleLogLib::writeLog("站端数据库文件" + dbName + "加载失败,请检查配置文件或者数据库是否存在!!!", "error", __FILE__, __LINE__);
SimpleLogLib::writeLog("当前路径:" + QDir::currentPath() + ",配置文件dbName路径:" + dbName, "error", __FILE__, __LINE__);
return false;
}
//判断SQLite数据库文件是否为空,不存在将错误信息写入文件,返回
if(QFileInfo(dbName).size() == 0) {
SimpleLogLib::writeLog("站端数据库文件" + dbName + "为空,请检查数据库信息!!!", "error", __FILE__, __LINE__);
return false;
}
SimpleLogLib::writeLog("站端数据库文件" + dbName + "加载成功!", "ValWellElectricTools", __FILE__, __LINE__);
return true;
}
SQLite更适合取代本地的文件存储。SQLite也适合给每天几十万点击量的网站提供数据支持。像微信就是用的SQLite数据库来存储我们的聊天信息的。
---------------再此记录一下