sqliteutil.cpp 6.88 KB
#include "sqliteutil.h"
#include "../../sqlite3/sqlite3.h"
#include <QString>
#include <QDebug>
#include <QStringList>
#include <QMutableMapIterator>
#include <QFile>
#include "GlobalSetting.h"
#include <QSettings>
#include <QMessageBox>
#include <QDir>
#include <QTextCodec>


sqlite3* pDB;
sqlite3* pDB_login;
sqlite3* pDB_nework;
SqliteUtil::SqliteUtil()
{
    isConfigFileOk = false;
    isHistroyConfigFileOk = false;
}

void SqliteUtil::connectSqlDB()
{
    int res = sqlite3_open(QString("config/%1.db").arg(1).toLocal8Bit().data(), &pDB);
    if(res){
       sqlite3_close(pDB);
    }
    sqlite3_key(pDB, "YOUAREBOSH201502021609", 22);

}
void SqliteUtil::connectSqlDBLogin()
{
    int res = sqlite3_open("config/list.db", &pDB_login);
    if(res){
       sqlite3_close(pDB_login);
    }
    sqlite3_key(pDB_login, "ISHOW20160222", 22);

    QFile filename("config/nw.db");
    bool isF = filename.exists();

    res = sqlite3_open("config/nw.db", &pDB_nework);
    if(res){
       sqlite3_close(pDB_nework);
    }
    sqlite3_key(pDB_nework, "ISHOW20160222", 22);

}



int SqliteUtil::createTable()
{
    QStringList sqls;

    return 0;
}

void SqliteUtil::writeTablesData(int datatype,int roomId)
{
    switch (datatype) {
    case 0:
    {
        QStringList sqls;
        sqls << "CREATE TABLE  If Not Exists UserInfo(headurl text, userid text, umoney text, uscore text, unickname text, usersex text, cidiograph text, lockmachine text, cguid text);";
        sqls << "delete from UserInfo;";
        QString sql2 = QString("INSERT INTO UserInfo(headurl, unickname, userid, umoney, uscore, usersex, cidiograph, lockmachine)VALUES('%1', '%2', '%3', '%4', '%5', '%6', '%7', '%8' );");
        sqls << sql2;
        insertsql(sqls, 1);
    }
        break;


    default:
        break;
    }
}
int SqliteUtil::execSql(QString sql, int type)
{
    sqlite3* pDB_temp = pDB;
    if(type == 1)
    {
        pDB_temp = pDB_login;
    }
    else if(type == 2)
    {
        pDB_temp = pDB_nework;
    }



    char* errMsg;
    int res = sqlite3_exec(pDB_temp,sql.toStdString().c_str(),0,0, &errMsg);

    if (res != SQLITE_OK)
    {
       qDebug()  << "执行SQL 出错." << errMsg << sql << res ;
       return -1;
    }
    return 0;
}

int SqliteUtil::insertsql(QStringList sqls,int type)
{
    sqlite3* pDB_temp = pDB;
    if(type == 1)
    {
        pDB_temp = pDB_login;
    }
    else if(type == 2)
    {
        pDB_temp = pDB_nework;
    }

    char* errMsg;

    int res = sqlite3_exec(pDB_temp, "begin transaction;", 0, 0, &errMsg);


    int errorcount = 0;
    for(int i=0;i<sqls.size();i++)
    {
        QString sql = sqls.at(i);
        int res = execSql(sql, type);
        if(res < 0) {

            errorcount++;

            qDebug() << "执行事物回滚";
            res = sqlite3_exec(pDB_temp, "rollback transaction" , 0 , 0 , &errMsg ) ;
            if(res)
            {
                qDebug() << "事物回滚成功" << sql;
            }
        }
    }

    res = sqlite3_exec(pDB_temp,"commit transaction;",0,0, &errMsg);
    return errorcount;
}


/***********************************************************
* 作者姓名:
* 函数介绍:
* 定义的参数含义说明
* 输入参数:
* 输出参数:
* 返回值
************************************************************/
void SqliteUtil::writeHistoryConfig(QString key, QString value)
{
    QSettings settings(SRVHISTORY_FILE, QSettings::IniFormat); // 当前目录的INI文件
    settings.beginGroup("VALUES");
    if(key == "ids")
    {
        QStringList ids = settings.value("ids").toString().split("#@#@#");
        if(ids.contains(value))
        {
            ids.removeOne(value);
        }
        QString newids = value;
        for(int i=0;i<ids.size();i++)
        {
            newids = newids.append("#@#@#").append(ids.at(i));
        }

        if(newids.split("#@#@#").size() >= 17)
        {
            int startindex = newids.lastIndexOf("#@#@#");
            newids = newids.mid(0, startindex);
        }
        value = newids;
    }
    settings.setValue(key, value);
    settings.endGroup();
}



//用户ID作为文件名
void SqliteUtil::writeConfigValue(QString key, QString value, QString userIdFlag)
{
    QString filename = QCoreApplication::applicationDirPath() + QString("/config/%1.ini").arg(userIdFlag);
    QSettings settings(filename, QSettings::IniFormat);

    QDir my_dir;
    QFileInfo my_info(filename);
    if (!my_dir.exists(my_info.absoluteDir().path())) {
        my_dir.mkpath(my_info.absoluteDir().path());
    }
    settings.beginGroup("VALUES");
    settings.setValue(key, value);
    settings.endGroup();
}


//用户ID相关的
QString SqliteUtil::readConfigValue(QString key, QString userIdFlag)
{/*
	static QMutex mutex;
    QMutexLocker locker(&mutex);*/


    QString filename = QCoreApplication::applicationDirPath()+QString("/config/%1.ini").arg(userIdFlag);
    QDir my_dir;
    QFileInfo my_info(filename);
    if(!my_dir.exists(my_info.absoluteDir().path()))
    {
       my_dir.mkpath(my_info.absoluteDir().path());
    }
    QSettings settings(filename, QSettings::IniFormat); // 当前目录的INI文件

    QTextCodec *code = QTextCodec::codecForName("utf-8");
    if(code == NULL)
    {
        code = QTextCodec::codecForLocale();
    }

    settings.setIniCodec(code);

    settings.beginGroup("VALUES");
    QString value = settings.value(key).toString();
    settings.endGroup();
    return value;
}

QString SqliteUtil::readHistory(QString key)
{
    QSettings settings(SRVHISTORY_FILE, QSettings::IniFormat); // 当前目录的INI文件

    settings.beginGroup("VALUES");
    QString ids = settings.value(key).toString();
    settings.endGroup();
    return ids;
}





void SqliteUtil::readTablesData(int datatype, int roomId)
{
    switch (datatype) {
    case 0:
    {
        char* errMsg;
        QString strSQL= "SELECT * FROM UserInfo;";

        int res = sqlite3_exec(pDB_login,strSQL.toStdString().c_str(),callback_UserInfo,0, &errMsg);

        if (res != SQLITE_OK)
        {
           qDebug() << "执行SQL 出错." << errMsg ;
        }
    }
        break;


    default:
        break;
    }
}

int SqliteUtil::callback_UserInfo(void *NotUsed, int argc, char **argv, char **azColName)
{
    //qDebug() << "SqliteUtil::callback_UserInfo" << NotUsed << argc;
    char temp[65];
    memset(temp, 0, sizeof(temp));
//    strcpy(_GlobalSetting.responseM->headurl, argv[0]);
//    strcpy(_GlobalSetting.responseM->unickname, argv[1]);
//    _GlobalSetting.responseM->userid = QString(argv[2]).toLongLong();
//    _GlobalSetting.responseM->umoney = QString(argv[3]).toLongLong();
//    _GlobalSetting.responseM->uscore = QString(argv[4]).toLongLong();
//    _GlobalSetting.responseM->usersex = (char)QString(argv[5]).toLocal8Bit().data();
//    strcpy(_GlobalSetting.responseM->cidiograph, argv[6]);
//    _GlobalSetting.responseM->lockmachine = QString(argv[7]).toInt();

    //qDebug() << _GlobalSetting.responseM->headurl;
    return 0;

}