将数据库保存到txt文件,然后还可以通过读取txt文件将数据库还原,这样做文件比较小,但是比较耗时,另外一种就是直接将数据库拷贝保存,耗时比较小但是文件会相对比较大
#include "dbcontrol.h"
#include "text.h"
#include "dataInfo.h"
/** 从文件中读取一行 */
int file_get_file_line(char *result, char *fileName, int lineNumber);
int db_filesave(QString db_text);
/** 写数据库配置到文件 */
int dbBak_saveDb2File(void)
{
SqlDatabase * my_SqlDatabase;
QDateTime time = QDateTime::currentDateTime();
QString timeStr = time.toString("yyyyMMdd");
QString fileStr = timeStr + "_db.txt";
#if defined(Q_OS_WIN32)
QFile file("C://shixunDb//db_bak//"+fileStr);
#else
QFile file("/home/shixunDb/db_bak/"+fileStr);
#endif
file.remove();
my_SqlDatabase = new SqlDatabase();
my_SqlDatabase->Creat_LocalsetDb();
my_SqlDatabase->db_queryAllLocalsetNetItem();
if(GlobalLocalsetnetInfo.size() < 1)
return 0;
db_filesave(GlobalLocalsetnetInfo.at(0).Addr);
db_filesave(GlobalLocalsetnetInfo.at(0).comm_type);
db_filesave(GlobalLocalsetnetInfo.at(0).Arrsubmask);
db_filesave(GlobalLocalsetnetInfo.at(0).Gateway);
db_filesave(GlobalLocalsetnetInfo.at(0).VideoSrc);
db_filesave(GlobalLocalsetnetInfo.at(0).LocalSetURL);
db_filesave(GlobalLocalsetnetInfo.at(0).LocalSetaURL);
db_filesave(GlobalLocalsetnetInfo.at(0).Decode_Mac);
db_filesave(GlobalLocalsetnetInfo.at(0).Code_Mac);
db_filesave(GlobalLocalsetnetInfo.at(0).CradleURL);
db_filesave(GlobalLocalsetnetInfo.at(0).reserved1);
my_SqlDatabase->db_queryAllLocalsetParaItem();
if(GlobalLocalsetParamInfo.size() < 1)
return 0;
db_filesave(GlobalLocalsetParamInfo.at(0).VideoFrameRate);
db_filesave(GlobalLocalsetParamInfo.at(0).channel_type);
db_filesave(GlobalLocalsetParamInfo.at(0).VideoType);
db_filesave(GlobalLocalsetParamInfo.at(0).VideoRes);
db_filesave(GlobalLocalsetParamInfo.at(0).VideoCodeRate);
db_filesave(GlobalLocalsetParamInfo.at(0).Video3G4GCodeRate);
db_filesave(GlobalLocalsetParamInfo.at(0).VideoStarCodeRate);
db_filesave(GlobalLocalsetParamInfo.at(0).AudioType);
db_filesave(GlobalLocalsetParamInfo.at(0).AudioCodeRate);
db_filesave(GlobalLocalsetParamInfo.at(0).AudioSampleRate);
db_filesave(GlobalLocalsetParamInfo.at(0).comm_type);
db_filesave(GlobalLocalsetParamInfo.at(0).SpeakerMute);
db_filesave(GlobalLocalsetParamInfo.at(0).SpeakerVolume);
db_filesave(GlobalLocalsetParamInfo.at(0).MicMute);
my_SqlDatabase->db_queryAllLocalsetSaveItem();
if(GlobalLocalsetSaveInfo.size() > 0)
{
db_filesave(GlobalLocalsetSaveInfo.at(0).savedir);
db_filesave(GlobalLocalsetSaveInfo.at(0).savemode);
db_filesave(GlobalLocalsetSaveInfo.at(0).saveregular);
}
my_SqlDatabase->closeLocalsetDb();
my_SqlDatabase->~SqlDatabase();
my_SqlDatabase = new SqlDatabase();
my_SqlDatabase->Creat_ContactDb();
my_SqlDatabase->db_queryAllContactItem();
db_filesave("DB:contact_name");
for(int i = 0; i < GlobalContactInfo.size(); i++)
{
QString saveDb = "";
saveDb = GlobalContactInfo.at(i).contact_name + ";" + GlobalContactInfo.at(i).father_id + ";"+GlobalContactInfo.at(i).level\
+";"+GlobalContactInfo.at(i).id_type+";"+GlobalContactInfo.at(i).ip+";"+GlobalContactInfo.at(i).sip+";"+GlobalContactInfo.at(i).rtsp_url\
+";"+GlobalContactInfo.at(i).Cradle;
db_filesave(saveDb);
}
my_SqlDatabase->closeLocalsetDb();
if(my_SqlDatabase !=NULL)
delete my_SqlDatabase;
db_filesave("DB:callrecord");
my_SqlDatabase = new SqlDatabase();
my_SqlDatabase->Creat_CallrecordDb();
my_SqlDatabase->Create_CallrecordTable();
my_SqlDatabase->db_queryAllCallrecordItem();
for(int i=0;i < GlobalCallrecordInfo.size(); i++)
{
QString saveDb = "";
saveDb = GlobalCallrecordInfo.at(i).callrecord_name1 + ";" + GlobalCallrecordInfo.at(i).callrecord_name + ";"+GlobalCallrecordInfo.at(i).UUName\
+";"+GlobalCallrecordInfo.at(i).startTime+";"+GlobalCallrecordInfo.at(i).endTime+";"+GlobalCallrecordInfo.at(i).talkTime;
db_filesave(saveDb);
}
my_SqlDatabase->closeCallrecordDb();
if(my_SqlDatabase !=NULL)
delete my_SqlDatabase;
db_filesave("DB:record");
my_SqlDatabase = new SqlDatabase();
my_SqlDatabase->Creat_RecordInfoDb();
my_SqlDatabase->Create_RecordInfoTable();
GlobalRecordInfo.clear();
my_SqlDatabase->db_queryAllRecordInfoItem();
my_SqlDatabase->closeRecordInfodDb();
if(my_SqlDatabase !=NULL)
delete my_SqlDatabase;
for(int i=0;i < GlobalRecordInfo.size(); i++)
{
QString saveDb = "";
saveDb = GlobalRecordInfo.at(i).record_dir + ";" + GlobalRecordInfo.at(i).record_name+";"+GlobalRecordInfo.at(i).startTime+";"\
+GlobalRecordInfo.at(i).endTime+";"+GlobalRecordInfo.at(i).talkTime;
db_filesave(saveDb);
}
db_filesave("end");
return 0;
}
/** 从文件中读取内容写入数据库 */
int dbBak_loadDbFromFile(QString fileStr)
{
char line[1024] = "";
SqlDatabase *my_SqlDatabase = new SqlDatabase();
file_get_file_line(line, fileStr.toLatin1().data(), 1);
ST_LOCALSETNET_DB_DATA localsetnet_info;
localsetnet_info.Addr = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 2);
localsetnet_info.comm_type = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 3);
localsetnet_info.Arrsubmask = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 4);
localsetnet_info.Gateway = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 5);
localsetnet_info.VideoSrc = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 6);
localsetnet_info.LocalSetURL = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 7);
localsetnet_info.LocalSetaURL = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 8);
localsetnet_info.Decode_Mac = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 9);
localsetnet_info.Code_Mac = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 10);
localsetnet_info.CradleURL = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 11);
localsetnet_info.reserved1 = QString(line);
my_SqlDatabase->Creat_LocalsetDb();
my_SqlDatabase->Create_LocalsetNetTable();
my_SqlDatabase->db_queryAllLocalsetNetItem();
if(GlobalLocalsetnetInfo.size() > 0)
{
for(int i = 0; i < GlobalLocalsetnetInfo.size(); i++)
{
my_SqlDatabase->db_deleteLocalsetNetItem(GlobalLocalsetnetInfo.at(i).Addr);
}
}
my_SqlDatabase->db_addLocalsetNetItem(localsetnet_info);
my_SqlDatabase->Create_LocalsetParaTable();
my_SqlDatabase->db_queryAllLocalsetParaItem();
if(GlobalLocalsetParamInfo.size() > 0)
{
for(int i = 0; i < GlobalLocalsetParamInfo.size(); i++)
{
my_SqlDatabase->db_deleteLocalsetParaItem(GlobalLocalsetParamInfo.at(i).VideoFrameRate);
}
}
ST_LOCALSETPARAM_DB_DATA localsetparam_info;
file_get_file_line(line, fileStr.toLatin1().data(), 12);
localsetparam_info.VideoFrameRate = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 13);
localsetparam_info.channel_type = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 14);
localsetparam_info.VideoType = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 15);
localsetparam_info.VideoRes = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 16);
localsetparam_info.VideoCodeRate = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 17);
localsetparam_info.Video3G4GCodeRate = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 18);
localsetparam_info.VideoStarCodeRate = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 19);
localsetparam_info.AudioType = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 20);
localsetparam_info.AudioCodeRate = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 21);
localsetparam_info.AudioSampleRate = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 22);
localsetparam_info.comm_type = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 23);
localsetparam_info.SpeakerMute = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 24);
localsetparam_info.SpeakerVolume = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 25);
localsetparam_info.MicMute = QString(line);
my_SqlDatabase->db_addLocalsetParaItem(localsetparam_info);
my_SqlDatabase->Create_LocalsetSaveTable();
my_SqlDatabase->db_queryAllLocalsetSaveItem();
for(int i = 0; i < GlobalLocalsetSaveInfo.size(); i++)
{
my_SqlDatabase->db_deleteLocalsetSaveItem(GlobalLocalsetSaveInfo.at(i).savedir);
}
ST_LOCALSETSAVE_DB_DATA localsetsave_info;
file_get_file_line(line, fileStr.toLatin1().data(), 26);
localsetsave_info.savedir = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 27);
localsetsave_info.savemode = QString(line);
file_get_file_line(line, fileStr.toLatin1().data(), 28);
localsetsave_info.saveregular = QString(line);
localsetsave_info.reserved1 = "1";
localsetsave_info.reserved2 = "2";
localsetsave_info.reserved3 = "3";
localsetsave_info.reserved4 = "4";
my_SqlDatabase->db_addLocalsetSaveItem(localsetsave_info);
my_SqlDatabase->closeLocalsetDb();
if(my_SqlDatabase !=NULL)
delete my_SqlDatabase;
GlobalLocalsetnetInfo.clear();
GlobalLocalsetParamInfo.clear();
GlobalLocalsetSaveInfo.clear();
file_get_file_line(line, fileStr.toLatin1().data(), 29);
int kk = 30;
if(QString(line) == "DB:contact_name")
{
my_SqlDatabase = new SqlDatabase();
my_SqlDatabase->Creat_ContactDb();
my_SqlDatabase->Create_ContactTable();
my_SqlDatabase->db_queryAllContactItem();
for(int i=0; i<GlobalContactInfo.size(); i++ )
{
my_SqlDatabase->db_deleteContactItem(GlobalContactInfo.at(i).contact_name);
}
while(QString(line) != "DB:callrecord")
{
file_get_file_line(line, fileStr.toLatin1().data(), kk);
if(QString(line) != "DB:callrecord")
{
QString str = QString(line);
ST_CONTACTINFO_DB_DATA contact_info = {0};
QString str1;
str1 = str.section(';', 0, 0);
contact_info.contact_name = str1;
str1 = str.section(';', 1, 1);
contact_info.father_id = str1;
str1 = str.section(';', 2, 2);
contact_info.level = str1;
str1 = str.section(';', 3, 3);
contact_info.id_type = str1;
str1 = str.section(';', 4, 4);
contact_info.ip = str1;
str1 = str.section(';', 5, 5);
contact_info.sip = str1;
str1 = str.section(';', 6, 6);
contact_info.rtsp_url = str1;
str1 = str.section(';', 7, 7);
contact_info.Cradle = str1;
my_SqlDatabase->db_addContactItem(contact_info);
kk++;
}
}
my_SqlDatabase->closeContactDb();
if(my_SqlDatabase !=NULL)
delete my_SqlDatabase;
GlobalContactInfo.clear();
}
file_get_file_line(line, fileStr.toLatin1().data(), kk);
if(QString(line) == "DB:callrecord")
{
my_SqlDatabase = new SqlDatabase();
my_SqlDatabase->Creat_CallrecordDb();//创建会诊记录数据库
my_SqlDatabase->Create_CallrecordTable();//创建会诊记录数据表
my_SqlDatabase->db_queryAllCallrecordItem();
if(GlobalCallrecordInfo.size() > 0)
{
for(int i=0;i<GlobalCallrecordInfo.size();i++)
{
my_SqlDatabase->db_deleteCallrecordItem(GlobalCallrecordInfo.at(i).callrecord_name1);
}
}
kk++;
while(QString(line) != "DB:record")
{
file_get_file_line(line, fileStr.toLatin1().data(), kk);
if(QString(line) != "DB:record")
{
QString str = QString(line);
ST_CALLRECORDINFO_DB_DATA Callrecord_info;
QString str1;
str1 = str.section(';', 0, 0);
Callrecord_info.callrecord_name1 = str1;
str1 = str.section(';', 1, 1);
Callrecord_info.callrecord_name = str1;
str1 = str.section(';', 2, 2);
Callrecord_info.UUName = str1;
str1 = str.section(';', 3, 3);
Callrecord_info.startTime = str1;
str1 = str.section(';', 4, 4);
Callrecord_info.endTime = str1;
str1 = str.section(';', 5, 5);
Callrecord_info.talkTime = str1;
my_SqlDatabase->db_addCallrecordItem(Callrecord_info);
kk++;
}
}
my_SqlDatabase->closeCallrecordDb();
if(my_SqlDatabase !=NULL)
delete my_SqlDatabase;
GlobalCallrecordInfo.clear();
}
file_get_file_line(line, fileStr.toLatin1().data(), kk);
if(QString(line) == "DB:record")
{
my_SqlDatabase = new SqlDatabase();
my_SqlDatabase->Creat_RecordInfoDb();//创建会诊记录数据库
my_SqlDatabase->Create_RecordInfoTable();//创建会诊记录数据表
my_SqlDatabase->db_queryAllRecordInfoItem();
if(GlobalRecordInfo.size() > 0)
{
for(int i=0;i<GlobalRecordInfo.size();i++)
{
my_SqlDatabase->db_deleteRecordInfoItem(GlobalRecordInfo.at(i).record_dir);
}
}
kk++;
while(QString(line) != "end")
{
file_get_file_line(line, fileStr.toLatin1().data(), kk);
if(QString(line) != "end")
{
QString str = QString(line);
ST_RECORDINFO_DB_DATA Record_info;
QString str1;
str1 = str.section(';', 0, 0);
Record_info.record_dir = str1;
str1 = str.section(';', 1, 1);
Record_info.record_name = str1;
str1 = str.section(';', 2, 2);
Record_info.startTime = str1;
str1 = str.section(';', 3, 3);
Record_info.endTime = str1;
str1 = str.section(';', 4, 4);
Record_info.talkTime = str1;
my_SqlDatabase->db_addRecordInfoItem(Record_info);
kk++;
}
}
my_SqlDatabase->closeCallrecordDb();
if(my_SqlDatabase !=NULL)
delete my_SqlDatabase;
GlobalRecordInfo.clear();
}
return 0;
}
///
/** 从文件中读取一行内容 */
#define FILEBUFFER_LENGTH 5000
#define EMPTY_STR ""
int file_get_file_line(char *result, char *fileName, int lineNumber)
{
FILE *filePointer;
int i=0;
char buffer[FILEBUFFER_LENGTH];
char *temp;
memset(buffer,'\0',FILEBUFFER_LENGTH*sizeof(char));
strcpy(buffer,EMPTY_STR);
if((fileName==NULL)||(result==NULL))
{
return 0;
}
strcpy(result, "");
if(!(filePointer=fopen(fileName,"rb")))
{return 0;}
while((!feof(filePointer))&&(i<lineNumber))
{
if(!fgets(buffer,FILEBUFFER_LENGTH,filePointer))
{
return 0;
}
i++;
}
if(0!=fclose(filePointer))
{
return 0;
}
if(0!=strcmp(buffer,EMPTY_STR))
{
while(NULL!=(temp=strstr(buffer,"\n")))
{
*temp='\0';
}
while(NULL!=(temp=strstr(buffer,"\r")))
{
*temp='\0';
}
strcpy(result,buffer);
}else
{
strcpy(result,EMPTY_STR);
return 0;
}
return 1;
}
int db_filesave(QString db_text)
{
QDateTime time = QDateTime::currentDateTime();
QString timeStr = time.toString("yyyyMMdd");
QString fileStr = timeStr + "_db.txt";
#if defined(Q_OS_WIN32)
QFile file("C://shixunDb//db_bak//" + fileStr);
#else
QFile file("/home/shixunDb/db_bak/" + fileStr);
#endif
if(!file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
{
return -1;
}
else
{
QTextStream in(&file);
in << db_text << "\n";
}
file.close();
return 0;
}