Skip to content

Commit 34afd35

Browse files
committed
Database: add error
1 parent e050238 commit 34afd35

3 files changed

Lines changed: 94 additions & 52 deletions

File tree

Src/Database/Database.cpp

Lines changed: 82 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,20 @@ const CParameterDatabase *CDatabase::GetParameter() const
5353
return m_pPara;
5454
}
5555

56+
const QString CDatabase::GetError() const
57+
{
58+
return m_szError;
59+
}
60+
61+
void CDatabase::SetError(const QString &szErr)
62+
{
63+
m_szError = szErr;
64+
}
65+
5666
bool CDatabase::OpenDatabase(const CParameterDatabase *pPara,
5767
const QString &szConnectName)
5868
{
69+
SetError();
5970
bool bRet = false;
6071
if(!pPara) {
6172
bRet = OpenSQLiteDatabase(pPara, szConnectName);
@@ -72,6 +83,8 @@ bool CDatabase::OpenDatabase(const CParameterDatabase *pPara,
7283
bRet = OpenMySqlDatabase(pPara, szConnectName);
7384
else if(pPara->GetType() == "QODBC")
7485
bRet = OpenODBCDatabase(pPara, szConnectName);
86+
else
87+
SetError(tr("The database type is unknow:") + " " + pPara->GetType());
7588

7689
QSqlDriver *driver = GetDatabase().driver();
7790
if (driver) {
@@ -128,12 +141,13 @@ bool CDatabase::OpenSQLiteDatabase(
128141
// 打开或创建数据库
129142
m_database = QSqlDatabase::addDatabase("QSQLITE", m_szConnectName);
130143
m_database.setDatabaseName(databasePath);
131-
144+
132145
if (!m_database.open()) {
133-
qCritical(log) << "Failed to open sqlite database:"
134-
<< m_database.lastError().text()
135-
<< "connect name:" << m_database.connectionName()
136-
<< "database name:" << m_database.databaseName();
146+
SetError("Failed to open sqlite database: "
147+
+ m_database.lastError().text()
148+
+ "; connect name: " + m_database.connectionName()
149+
+ "; database name: " + m_database.databaseName());
150+
qCritical(log) << GetError();
137151
return false;
138152
}
139153

@@ -170,31 +184,35 @@ bool CDatabase::OpenMySqlDatabase(const CParameterDatabase *pPara,
170184
auto &user = net.m_User;
171185
m_database.setUserName(user.GetName());
172186
m_database.setPassword(user.GetPassword());
173-
187+
174188
if (!m_database.open()) {
175-
qCritical(log) << "Failed to open mysql database:"
176-
<< m_database.lastError().text()
177-
<< "Host:" << net.GetHost() << "Port:" << net.GetPort()
178-
<< "User:" << user.GetUser()
179-
<< "connect name:" << m_database.connectionName()
180-
<< "database name:" << m_database.databaseName();
189+
SetError("Failed to open mysql database: "
190+
+ m_database.lastError().text()
191+
+ "; Host: " + net.GetHost()
192+
+ "; Port: " + QString::number(net.GetPort())
193+
+ "; User: " + user.GetUser()
194+
+ "; connect name: " + m_database.connectionName()
195+
+ "; database name: " + m_database.databaseName());
196+
qCritical(log) << GetError();
181197
return false;
182198
}
183199

184200
QSqlQuery query(GetDatabase());
185201
success = query.exec("CREATE DATABASE IF NOT EXISTS " + szDbName);
186202
if (!success) {
187-
qCritical(log) << "Failed to create" << szDbName << "database:"
188-
<< query.lastError().text()
189-
<< "Sql:" << query.executedQuery();
203+
SetError("Failed to create " + szDbName + " database: "
204+
+ query.lastError().text()
205+
+ "; Sql: " + query.executedQuery());
206+
qCritical(log) << GetError();
190207
return false;
191208
}
192209

193210
success = query.exec("use " + szDbName);
194211
if (!success) {
195-
qCritical(log) << "Failed to use" << szDbName << "database:"
196-
<< query.lastError().text()
197-
<< "Sql:" << query.executedQuery();
212+
SetError("Failed to use " + szDbName + " database: "
213+
+ query.lastError().text()
214+
+ "; Sql: " + query.executedQuery());
215+
qCritical(log) << GetError();
198216
return false;
199217
}
200218

@@ -227,29 +245,32 @@ bool CDatabase::OpenODBCDatabase(const CParameterDatabase *pPara,
227245
#endif
228246
}
229247
m_database.setDatabaseName(szDbName);
230-
248+
231249
if (!m_database.open()) {
232-
qCritical(log) << "Failed to open odbc database:"
233-
<< m_database.lastError().text()
234-
<< "connect name:" << m_database.connectionName()
235-
<< "database name:" << m_database.databaseName();
250+
SetError("Failed to open odbc database: "
251+
+ m_database.lastError().text()
252+
+ "; connect name: " + m_database.connectionName()
253+
+ "; database name: " + m_database.databaseName());
254+
qCritical(log) << GetError();
236255
return false;
237256
}
238-
257+
239258
QSqlQuery query(GetDatabase());
240259
bool success = query.exec("CREATE DATABASE IF NOT EXISTS " + szDbName);
241260
if (!success) {
242-
qCritical(log) << "Failed to create" << szDbName << "database:"
243-
<< query.lastError().text()
244-
<< "Sql:" << query.executedQuery();
261+
SetError("Failed to create " + szDbName + " database: "
262+
+ query.lastError().text()
263+
+ "; Sql: " + query.executedQuery());
264+
qCritical(log) << GetError();
245265
return false;
246266
}
247267

248268
success = query.exec("use " + szDbName);
249269
if (!success) {
250-
qCritical(log) << "Failed to use" << szDbName << "database:"
251-
<< query.lastError().text()
252-
<< "Sql:" << query.executedQuery();
270+
SetError("Failed to use " + szDbName + " database: "
271+
+ query.lastError().text()
272+
+ "; Sql: " + query.executedQuery());
273+
qCritical(log) << GetError();
253274
return false;
254275
}
255276

@@ -300,9 +321,11 @@ void CDatabase::CloseDatabase()
300321

301322
bool CDatabase::ExportToJsonFile(const QString &szFile)
302323
{
324+
SetError();
303325
QFile file(szFile);
304326
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
305-
qCritical(log) << "Failed to open file:" << szFile << file.errorString();
327+
SetError("Failed to open export JSON file: " + szFile + "; " + file.errorString());
328+
qCritical(log) << GetError();
306329
return false;
307330
}
308331

@@ -334,9 +357,11 @@ bool CDatabase::ExportToJsonFile(const QString &szFile)
334357
bool CDatabase::ImportFromJsonFile(const QString &szFile)
335358
{
336359
bool bRet = false;
360+
SetError();
337361
QFile file(szFile);
338362
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
339-
qCritical(log) << "Failed to open file:" << szFile << file.errorString();
363+
SetError("Failed to open import JSON file: " + szFile + "; " + file.errorString());
364+
qCritical(log) << GetError();
340365
return false;
341366
}
342367

@@ -347,13 +372,15 @@ bool CDatabase::ImportFromJsonFile(const QString &szFile)
347372
break;
348373
auto root = doc.object();
349374
if(root["Title"] != "Rabbit Remote Control") {
350-
qCritical(log) << "The file format is error";
375+
SetError("The file format is error");
376+
qCritical(log) << GetError();
351377
break;
352378
}
353379
QString szVersion = root["Version"].toString();
354380
if(RabbitCommon::CTools::VersionCompare(szVersion, m_MinVersion) < 0) {
355-
qCritical(log) << "The version is not support:"
356-
<< szVersion << "<" << m_MinVersion;
381+
SetError("The version is not support: "
382+
+ szVersion + " < " + m_MinVersion);
383+
qCritical(log) << GetError();
357384
break;
358385
}
359386
bRet = ImportFromJson(doc.object());
@@ -403,9 +430,10 @@ bool CDatabaseIcon::OnInitializeSqliteDatabase()
403430
;
404431
bool success = query.exec(szSql);
405432
if (!success) {
406-
qCritical(log) << "Failed to create icon sqlite table:"
407-
<< m_szTableName << query.lastError().text()
408-
<< "Sql:" << query.executedQuery();
433+
SetError("Failed to create icon sqlite table: "
434+
+ m_szTableName + "; error: " + query.lastError().text()
435+
+ "; Sql: " + query.executedQuery());
436+
qCritical(log) << GetError();
409437
return false;
410438
}
411439
success = query.exec("CREATE INDEX IF NOT EXISTS idx_" + m_szTableName + "_name ON " + m_szTableName + "(name)");
@@ -440,9 +468,10 @@ bool CDatabaseIcon::OnInitializeMySqlDatabase()
440468
;
441469
bool success = query.exec(szSql);
442470
if (!success) {
443-
qCritical(log) << "Failed to create icon mysql table:"
444-
<< m_szTableName << query.lastError().text()
445-
<< "Sql:" << query.executedQuery();
471+
SetError("Failed to create icon mysql table: "
472+
+ m_szTableName + "; " + query.lastError().text()
473+
+ "; Sql: " + query.executedQuery());
474+
qCritical(log) << GetError();
446475
return false;
447476
}
448477

@@ -488,8 +517,9 @@ int CDatabaseIcon::GetIcon(const QIcon &icon)
488517
query.bindValue(":data", data);
489518
bRet = query.exec();
490519
if(!bRet) {
491-
qCritical(log) << "Failed to insert icon hash:"
492-
<< szHash << query.lastError().text();
520+
SetError("Failed to insert icon hash: "
521+
+ szHash + "; " + query.lastError().text());
522+
qCritical(log) << GetError();
493523
return 0;
494524
}
495525
return query.lastInsertId().toInt();
@@ -501,8 +531,9 @@ int CDatabaseIcon::GetIcon(const QIcon &icon)
501531
query.bindValue(":name", szName);
502532
bRet = query.exec();
503533
if(!bRet) {
504-
qCritical(log) << "Failed to select icon name:"
505-
<< szName << query.lastError().text();
534+
SetError("Failed to select icon name: "
535+
+ szName + "; " + query.lastError().text());
536+
qCritical(log) << GetError();
506537
return 0;
507538
}
508539
if(query.next()) {
@@ -515,8 +546,9 @@ int CDatabaseIcon::GetIcon(const QIcon &icon)
515546
query.bindValue(":name", szName);
516547
bRet = query.exec();
517548
if(!bRet) {
518-
qCritical(log) << "Failed to insert icon name:"
519-
<< szName << query.lastError().text();
549+
SetError("Failed to insert icon name: "
550+
+ szName + "; " + query.lastError().text());
551+
qCritical(log) << GetError();
520552
return 0;
521553
}
522554
return query.lastInsertId().toInt();
@@ -533,8 +565,9 @@ QIcon CDatabaseIcon::GetIcon(int id)
533565
query.bindValue(":id", id);
534566
bool bRet = query.exec();
535567
if(!bRet) {
536-
qCritical(log) << "Failed to get icon id:"
537-
<< id << query.lastError().text();
568+
SetError("Failed to get icon id: "
569+
+ QString::number(id) + "; " + query.lastError().text());
570+
qCritical(log) << GetError();
538571
return icon;
539572
}
540573

Src/Database/Database.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ class PLUGIN_EXPORT CDatabase : public QObject
7272
[[nodiscard]] virtual bool OnInitializeDatabase();
7373

7474
[[nodiscard]] const CParameterDatabase* GetParameter() const;
75-
75+
[[nodiscard]] const QString GetError() const;
76+
7677
[[nodiscard]] virtual bool ExportToJsonFile(const QString& szFile);
7778
[[nodiscard]] virtual bool ImportFromJsonFile(const QString& szFile);
7879
[[nodiscard]] virtual bool ExportToJson(QJsonObject& obj);
@@ -84,6 +85,7 @@ class PLUGIN_EXPORT CDatabase : public QObject
8485
protected:
8586
[[nodiscard]] virtual bool OnInitializeSqliteDatabase();
8687
[[nodiscard]] virtual bool OnInitializeMySqlDatabase();
88+
void SetError(const QString& szErr = QString());
8789

8890
protected:
8991
QString m_szConnectName;
@@ -92,6 +94,7 @@ class PLUGIN_EXPORT CDatabase : public QObject
9294

9395
private:
9496
QSqlDatabase m_database;
97+
QString m_szError;
9598
};
9699

97100
class PLUGIN_EXPORT CDatabaseIcon : public CDatabase

Src/Database/ParameterDatabaseUI.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,10 +204,16 @@ void CParameterDatabaseUI::on_pbTestConnect_clicked()
204204
ui->wNet->Accept();
205205
dbPara.m_Net = m_Net;
206206
CDatabase db;
207-
if(db.OpenDatabase(&dbPara))
207+
bool bRet = db.OpenDatabase(&dbPara);
208+
if(bRet) {
209+
bRet = db.IsOpen();
210+
}
211+
if(bRet)
208212
QMessageBox::information(this, tr("Test connect"), tr("Test connect is successfully"));
209213
else
210-
QMessageBox::critical(this, tr("Test connect"), tr("Test connect is failed"));
214+
QMessageBox::critical(this, tr("Test connect"),
215+
tr("Test connect is failed") + "\n\n"
216+
+ db.GetError());
211217
db.CloseDatabase();
212218
}
213219

0 commit comments

Comments
 (0)