Skip to content

Commit a7494d4

Browse files
committed
Database: add error
1 parent 8deeede commit a7494d4

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
@@ -52,9 +52,20 @@ const CParameterDatabase *CDatabase::GetParameter() const
5252
return m_pPara;
5353
}
5454

55+
const QString CDatabase::GetError() const
56+
{
57+
return m_szError;
58+
}
59+
60+
void CDatabase::SetError(const QString &szErr)
61+
{
62+
m_szError = szErr;
63+
}
64+
5565
bool CDatabase::OpenDatabase(const CParameterDatabase *pPara,
5666
const QString &szConnectName)
5767
{
68+
SetError();
5869
bool bRet = false;
5970
if(!pPara) {
6071
bRet = OpenSQLiteDatabase(pPara, szConnectName);
@@ -71,6 +82,8 @@ bool CDatabase::OpenDatabase(const CParameterDatabase *pPara,
7182
bRet = OpenMySqlDatabase(pPara, szConnectName);
7283
else if(pPara->GetType() == "QODBC")
7384
bRet = OpenODBCDatabase(pPara, szConnectName);
85+
else
86+
SetError(tr("The database type is unknow:") + " " + pPara->GetType());
7487

7588
QSqlDriver *driver = GetDatabase().driver();
7689
if (driver) {
@@ -127,12 +140,13 @@ bool CDatabase::OpenSQLiteDatabase(
127140
// 打开或创建数据库
128141
m_database = QSqlDatabase::addDatabase("QSQLITE", m_szConnectName);
129142
m_database.setDatabaseName(databasePath);
130-
143+
131144
if (!m_database.open()) {
132-
qCritical(log) << "Failed to open sqlite database:"
133-
<< m_database.lastError().text()
134-
<< "connect name:" << m_database.connectionName()
135-
<< "database name:" << m_database.databaseName();
145+
SetError("Failed to open sqlite database: "
146+
+ m_database.lastError().text()
147+
+ "; connect name: " + m_database.connectionName()
148+
+ "; database name: " + m_database.databaseName());
149+
qCritical(log) << GetError();
136150
return false;
137151
}
138152

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

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

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

@@ -226,29 +244,32 @@ bool CDatabase::OpenODBCDatabase(const CParameterDatabase *pPara,
226244
#endif
227245
}
228246
m_database.setDatabaseName(szDbName);
229-
247+
230248
if (!m_database.open()) {
231-
qCritical(log) << "Failed to open odbc database:"
232-
<< m_database.lastError().text()
233-
<< "connect name:" << m_database.connectionName()
234-
<< "database name:" << m_database.databaseName();
249+
SetError("Failed to open odbc database: "
250+
+ m_database.lastError().text()
251+
+ "; connect name: " + m_database.connectionName()
252+
+ "; database name: " + m_database.databaseName());
253+
qCritical(log) << GetError();
235254
return false;
236255
}
237-
256+
238257
QSqlQuery query(GetDatabase());
239258
bool success = query.exec("CREATE DATABASE IF NOT EXISTS " + szDbName);
240259
if (!success) {
241-
qCritical(log) << "Failed to create" << szDbName << "database:"
242-
<< query.lastError().text()
243-
<< "Sql:" << query.executedQuery();
260+
SetError("Failed to create " + szDbName + " database: "
261+
+ query.lastError().text()
262+
+ "; Sql: " + query.executedQuery());
263+
qCritical(log) << GetError();
244264
return false;
245265
}
246266

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

@@ -299,9 +320,11 @@ void CDatabase::CloseDatabase()
299320

300321
bool CDatabase::ExportToJsonFile(const QString &szFile)
301322
{
323+
SetError();
302324
QFile file(szFile);
303325
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
304-
qCritical(log) << "Failed to open file:" << szFile << file.errorString();
326+
SetError("Failed to open export JSON file: " + szFile + "; " + file.errorString());
327+
qCritical(log) << GetError();
305328
return false;
306329
}
307330

@@ -333,9 +356,11 @@ bool CDatabase::ExportToJsonFile(const QString &szFile)
333356
bool CDatabase::ImportFromJsonFile(const QString &szFile)
334357
{
335358
bool bRet = false;
359+
SetError();
336360
QFile file(szFile);
337361
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
338-
qCritical(log) << "Failed to open file:" << szFile << file.errorString();
362+
SetError("Failed to open import JSON file: " + szFile + "; " + file.errorString());
363+
qCritical(log) << GetError();
339364
return false;
340365
}
341366

@@ -346,13 +371,15 @@ bool CDatabase::ImportFromJsonFile(const QString &szFile)
346371
break;
347372
auto root = doc.object();
348373
if(root["Title"] != "Rabbit Remote Control") {
349-
qCritical(log) << "The file format is error";
374+
SetError("The file format is error");
375+
qCritical(log) << GetError();
350376
break;
351377
}
352378
QString szVersion = root["Version"].toString();
353379
if(RabbitCommon::CTools::VersionCompare(szVersion, m_MinVersion) < 0) {
354-
qCritical(log) << "The version is not support:"
355-
<< szVersion << "<" << m_MinVersion;
380+
SetError("The version is not support: "
381+
+ szVersion + " < " + m_MinVersion);
382+
qCritical(log) << GetError();
356383
break;
357384
}
358385
bRet = ImportFromJson(doc.object());
@@ -402,9 +429,10 @@ bool CDatabaseIcon::OnInitializeSqliteDatabase()
402429
;
403430
bool success = query.exec(szSql);
404431
if (!success) {
405-
qCritical(log) << "Failed to create icon sqlite table:"
406-
<< m_szTableName << query.lastError().text()
407-
<< "Sql:" << query.executedQuery();
432+
SetError("Failed to create icon sqlite table: "
433+
+ m_szTableName + "; error: " + query.lastError().text()
434+
+ "; Sql: " + query.executedQuery());
435+
qCritical(log) << GetError();
408436
return false;
409437
}
410438
success = query.exec("CREATE INDEX IF NOT EXISTS idx_" + m_szTableName + "_name ON " + m_szTableName + "(name)");
@@ -439,9 +467,10 @@ bool CDatabaseIcon::OnInitializeMySqlDatabase()
439467
;
440468
bool success = query.exec(szSql);
441469
if (!success) {
442-
qCritical(log) << "Failed to create icon mysql table:"
443-
<< m_szTableName << query.lastError().text()
444-
<< "Sql:" << query.executedQuery();
470+
SetError("Failed to create icon mysql table: "
471+
+ m_szTableName + "; " + query.lastError().text()
472+
+ "; Sql: " + query.executedQuery());
473+
qCritical(log) << GetError();
445474
return false;
446475
}
447476

@@ -487,8 +516,9 @@ int CDatabaseIcon::GetIcon(const QIcon &icon)
487516
query.bindValue(":data", data);
488517
bRet = query.exec();
489518
if(!bRet) {
490-
qCritical(log) << "Failed to insert icon hash:"
491-
<< szHash << query.lastError().text();
519+
SetError("Failed to insert icon hash: "
520+
+ szHash + "; " + query.lastError().text());
521+
qCritical(log) << GetError();
492522
return 0;
493523
}
494524
return query.lastInsertId().toInt();
@@ -500,8 +530,9 @@ int CDatabaseIcon::GetIcon(const QIcon &icon)
500530
query.bindValue(":name", szName);
501531
bRet = query.exec();
502532
if(!bRet) {
503-
qCritical(log) << "Failed to select icon name:"
504-
<< szName << query.lastError().text();
533+
SetError("Failed to select icon name: "
534+
+ szName + "; " + query.lastError().text());
535+
qCritical(log) << GetError();
505536
return 0;
506537
}
507538
if(query.next()) {
@@ -514,8 +545,9 @@ int CDatabaseIcon::GetIcon(const QIcon &icon)
514545
query.bindValue(":name", szName);
515546
bRet = query.exec();
516547
if(!bRet) {
517-
qCritical(log) << "Failed to insert icon name:"
518-
<< szName << query.lastError().text();
548+
SetError("Failed to insert icon name: "
549+
+ szName + "; " + query.lastError().text());
550+
qCritical(log) << GetError();
519551
return 0;
520552
}
521553
return query.lastInsertId().toInt();
@@ -532,8 +564,9 @@ QIcon CDatabaseIcon::GetIcon(int id)
532564
query.bindValue(":id", id);
533565
bool bRet = query.exec();
534566
if(!bRet) {
535-
qCritical(log) << "Failed to get icon id:"
536-
<< id << query.lastError().text();
567+
SetError("Failed to get icon id: "
568+
+ QString::number(id) + "; " + query.lastError().text());
569+
qCritical(log) << GetError();
537570
return icon;
538571
}
539572

Src/Database/Database.h

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

7575
[[nodiscard]] const CParameterDatabase* GetParameter() const;
76-
76+
[[nodiscard]] const QString GetError() const;
77+
7778
[[nodiscard]] virtual bool ExportToJsonFile(const QString& szFile);
7879
[[nodiscard]] virtual bool ImportFromJsonFile(const QString& szFile);
7980
[[nodiscard]] virtual bool ExportToJson(QJsonObject& obj);
@@ -85,6 +86,7 @@ class PLUGIN_EXPORT CDatabase : public QObject
8586
protected:
8687
[[nodiscard]] virtual bool OnInitializeSqliteDatabase();
8788
[[nodiscard]] virtual bool OnInitializeMySqlDatabase();
89+
void SetError(const QString& szErr = QString());
8890

8991
protected:
9092
QString m_szConnectName;
@@ -93,6 +95,7 @@ class PLUGIN_EXPORT CDatabase : public QObject
9395

9496
private:
9597
QSqlDatabase m_database;
98+
QString m_szError;
9699
};
97100

98101
/*!

Src/Database/ParameterDatabaseUI.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,16 @@ void CParameterDatabaseUI::on_pbTestConnect_clicked()
208208
ui->wNet->Accept();
209209
dbPara.m_Net = m_Net;
210210
CDatabase db;
211-
if(db.OpenDatabase(&dbPara))
211+
bool bRet = db.OpenDatabase(&dbPara);
212+
if(bRet) {
213+
bRet = db.IsOpen();
214+
}
215+
if(bRet)
212216
QMessageBox::information(this, tr("Test connect"), tr("Test connect is successfully"));
213217
else
214-
QMessageBox::critical(this, tr("Test connect"), tr("Test connect is failed"));
218+
QMessageBox::critical(this, tr("Test connect"),
219+
tr("Test connect is failed") + "\n\n"
220+
+ db.GetError());
215221
db.CloseDatabase();
216222
}
217223

0 commit comments

Comments
 (0)