将数据库保存

将数据库保存到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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值