• 技术文章 >数据库 >mysql教程

    linuxCsqlite3mysql_MySQL

    2016-05-30 17:11:15原创555
    /* ********** gcc main.c -lsqlite3 -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient ************
    
    SQLITE_OK = 0; 返回成功
    SQLITE_ERROR = 1; SQL错误或错误的数据库
    SQLITE_INTERNAL = 2; An internal logic error in SQLite
    SQLITE_PERM = 3; 拒绝访问
    SQLITE_ABORT = 4; 回调函数请求中断
    SQLITE_BUSY = 5; 数据库文件被锁
    SQLITE_LOCKED = 6; 数据库中的一个表被锁
    SQLITE_NOMEM = 7; 内存分配失败
    SQLITE_READONLY = 8; 试图对一个只读数据库进行写操作
    SQLITE_INTERRUPT = 9; 由sqlite_interrupt()结束操作
    SQLITE_IOERR = 10; 磁盘I/O发生错误
    SQLITE_CORRUPT = 11; 数据库磁盘镜像畸形
    SQLITE_NOTFOUND = 12; (Internal Only)表或记录不存在
    SQLITE_FULL = 13; 数据库满插入失败
    SQLITE_CANTOPEN = 14; 不能打开数据库文件
    SQLITE_PROTOCOL = 15; 数据库锁定协议错误
    SQLITE_EMPTY = 16; (Internal Only)数据库表为空
    SQLITE_SCHEMA = 17; 数据库模式改变
    SQLITE_TOOBIG = 18; 对一个表数据行过多
    SQLITE_CONSTRAINT = 19; 由于约束冲突而中止
    SQLITE_MISMATCH = 20; 数据类型不匹配
    SQLITE_MISUSE = 21; 数据库错误使用
    SQLITE_NOLFS = 22; 使用主机操作系统不支持的特性
    SQLITE_AUTH = 23; 非法授权
    SQLITE_FORMAT = 24; 辅助数据库格式错误
    SQLITE_RANGE = 25; 2nd parameter to sqlite_bind out of range
    SQLITE_NOTADB = 26; 打开的不是一个数据库文件
    SQLITE_ROW = 100; sqlite_step() has another row ready
    SQLITE_DONE = 101; sqlite_step() has finished executing
    
    *************************************************************************************************** */
    
    #include "DB.h"
    
    gseMutex dbMutex=GSE_MUTEX_INIT;
    static int IsUpdateAll = 0;
    static int iDelCount = 0;
    const int FREE_NUM = 1000;
    static int needVacuum = 0;
    
    int DBOpen(dbClass *sqlDB, const char *sqlName, char *localhost, char *user, char *password)
    {
        if(sqlDB == NULL || sqlName == NULL || 0 == strlen(sqlName))
        {
            gseLog(L_ERROR,"NULL *p");
            return -1;
        }
    
        int ret = 0;
        if(sqlDB->type == SQL_SQLITE3)
        {
            gseMutexLock(&dbMutex);
            sqlDB->db = (sqlite3 *)sqlDB->db;
    
            localhost = NULL;
            user = NULL;
            password = NULL;
    
            char sqlPathName[64]={0};
            sprintf(sqlPathName, "%s", sqlName);
            ret = sqlite3_open(sqlPathName, (struct sqlite3 **)&(sqlDB->db));
            if(ret != SQLITE_OK)
            {
                gseLog(L_ERROR,"ret = %d, Cannot open db: %s",ret,sqlite3_errmsg(sqlDB->db));
            }
            gseMutexUnlock(&dbMutex);
    //      gseLog(L_INFO,"Open database");
    
        }
        else if(sqlDB->type == SQL_MYSQL)
        {
    #ifdef MYSQL_DEFINE
            sqlDB->db = (MYSQL *)sqlDB->db;
            if(localhost == NULL || user == NULL || password == NULL)
            {
                gseLog(L_ERROR,"localhost user password is NULL");
                return -1;
            }
    
            char creatDbStr[64]={0};
            char useDbStr[64]={0};
            sprintf(creatDbStr, "create database %s", sqlName);
            sprintf(useDbStr, "use %s", sqlName);
    
            sqlDB->db= mysql_init(NULL);
            if (sqlDB->db== NULL) 
            {
                gseLog(L_ERROR,"sqlOpen Error 1 %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db));
                exit(1);
            }
            if (mysql_real_connect(sqlDB->db, localhost, user, password, NULL, 0, NULL, 0) == NULL)
            {
                gseLog(L_ERROR,"sqlOpen Error 2 %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db));
                exit(1);
            }
            ret = mysql_query(sqlDB->db, creatDbStr);
            if (ret) 
            {
                gseLog(L_ERROR,"sqlOpen Error 3 %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db));
            }
            ret = mysql_query(sqlDB->db, useDbStr);
            if (ret) 
            {
                gseLog(L_ERROR,"sqlOpen Error 4 %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db));
                exit(1);
            }
    #endif
    
        }
        else
        {
            return -2;
        }
        return ret;
    
    }
    
    int DBClose(dbClass *sqlDB)
    {
        if(NULL == sqlDB || NULL == sqlDB->db)
        {
            return -1;
        }
        int ret = 0;
        if(sqlDB->type == SQL_SQLITE3)
        {
            gseMutexLock(&dbMutex);
            sqlDB->db = (sqlite3 *)sqlDB->db;
            ret = sqlite3_close(sqlDB->db);
            gseMutexUnlock(&dbMutex);
        }
        else if(sqlDB->type == SQL_MYSQL)
        {
    #ifdef MYSQL_DEFINE
            sqlDB->db = (MYSQL *)sqlDB->db;
            mysql_close(sqlDB->db);
    #endif
        }
        else
        {
            return -2;
        }
    
    //  gseLog(L_INFO, "Close database");
        return ret;
    }
    
    int DBCreate(dbClass *sqlDB, const char *tableName, char *creatValueStr)
    {
        if(sqlDB == NULL || tableName == NULL || creatValueStr == NULL || NULL == sqlDB->db || 0 == strlen(creatValueStr))
        {
            gseLog(L_ERROR,"*db is NULL");
            return -1;
        }
    
        char *errmsg = 0;
        int ret = 0;
        char createString[MAX_SQLSTR]={0};
        if(strlen(creatValueStr) >= 1)
            creatValueStr[strlen(creatValueStr) - 1]='\0';
        sprintf(createString, "create table %s(%s)", tableName,creatValueStr);
        //create table tb_cardId(cardID KEY, cardNum INT, endDate INT, password NVARCHAR(8))
        memset(creatValueStr, 0, strlen(creatValueStr));
    
        if(sqlDB->type == SQL_SQLITE3)
        {
            gseMutexLock(&dbMutex);
            sqlDB->db = (sqlite3 *)sqlDB->db;
            ret = sqlite3_exec(sqlDB->db,createString,NULL,NULL,&errmsg);
            if(ret != SQLITE_OK)
            {
                gseLog(L_ERROR,"ret = %d, create table fail: %s", ret, errmsg);
            }
            else
                gseLog(L_INFO, "create table %s success.", tableName);
            sqlite3_free(errmsg);
            gseMutexUnlock(&dbMutex);
        }
        else if(sqlDB->type == SQL_MYSQL)
        {
    #ifdef MYSQL_DEFINE
            sqlDB->db = (MYSQL *)sqlDB->db;
    
            ret = mysql_query(sqlDB->db, createString);
            if (ret)
            {
                gseLog(L_ERROR,"sqlCreate Error  %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db));
            }
    #endif
        }
        else
        {
            return -2;
        }
    
    
        return ret;
    }
    
    int DBInsert(dbClass *sqlDB, const char *tableName, char *valuesString)
    {
        if(sqlDB == NULL || tableName == NULL || valuesString == NULL || NULL == sqlDB->db || 0 == strlen(valuesString))
        {
            gseLog(L_ERROR,"*db is NULL");
            return -1;
        }
        char *errmsg = 0;
        int ret = 0;
        char sqlInsetTable[MAX_SQLSTR]={0};
        if(strlen(valuesString) >= 1)
            valuesString[strlen(valuesString)-1]='\0';
        sprintf(sqlInsetTable, "insert into %s values(%s)",tableName,valuesString);
        //insert into tb_cardId values(1,124343223,20130101,'12345678');
        memset(valuesString, 0, strlen(valuesString));
    
        if(sqlDB->type == SQL_SQLITE3)
        {
            gseMutexLock(&dbMutex);
            sqlDB->db = (sqlite3 *)sqlDB->db;
            ret = sqlite3_exec(sqlDB->db,sqlInsetTable,NULL,NULL,&errmsg);
            if(ret != SQLITE_OK)
            {
                gseLog(L_ERROR, "%s",sqlInsetTable);
                gseLog(L_ERROR,"ret = %d, inset table fail: %s",ret,errmsg);
            }
            sqlite3_free(errmsg);
            gseMutexUnlock(&dbMutex);
        }
        else if(sqlDB->type == SQL_MYSQL)
        {
    #ifdef MYSQL_DEFINE
            sqlDB->db = (MYSQL *)sqlDB->db;
            ret = mysql_query(sqlDB->db, sqlInsetTable);
            if (ret)
            {
                gseLog(L_ERROR,"sqlInsert Error 4 %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db));
            }
    #endif
        }
        else
        {
            ret = -2;
        }
        if(1 == IsUpdateAll && 0 != ret)
        {
            rollBack(sqlDB);
            return ret;
        }
    
        return ret;
    }
    
    int DBUpdate(dbClass *sqlDB, const char *tableName, char *updateSetStr, char *updateWhereStr)
    {
        if(sqlDB == NULL || tableName == NULL || updateSetStr == NULL || updateWhereStr == NULL)
        {
            gseLog(L_ERROR,"*db is NULL");
            return -1;
        }
        if(strlen(updateSetStr) >= 1)
            updateSetStr[strlen(updateSetStr)-1]='\0';
        if(strlen(updateWhereStr) >= 3)
            updateWhereStr[strlen(updateWhereStr)-3]='\0';
        char *errmsg = 0;
        int ret = 0;
        char sqlUpdateTable[MAX_SQLSTR]={0};
        sprintf(sqlUpdateTable, "update %s set %s where %s", tableName, updateSetStr, updateWhereStr);
        //update tb_cardID set cardNum=1243423,password='323443' where cardID=1 and endDate=2013;
        memset(updateSetStr, 0, strlen(updateSetStr));
        memset(updateWhereStr, 0, strlen(updateWhereStr));
    
        if(sqlDB->type == SQL_SQLITE3)
        {
            gseMutexLock(&dbMutex);
            sqlDB->db = (sqlite3 *)sqlDB->db;
            ret = sqlite3_exec(sqlDB->db,sqlUpdateTable,NULL,NULL,&errmsg);
            if(ret != SQLITE_OK)
            {
                gseLog(L_ERROR, "%s",sqlUpdateTable);
                gseLog(L_ERROR,"ret = %d, update table fail: %s", ret, errmsg);
            }
            sqlite3_free(errmsg);
            gseMutexUnlock(&dbMutex);
        }
        else if(sqlDB->type == SQL_MYSQL)
        {
    #ifdef MYSQL_DEFINE
            sqlDB->db = (MYSQL *)sqlDB->db;
            ret = mysql_query(sqlDB->db, sqlUpdateTable);
            if (ret)
            {
                gseLog(L_ERROR,"sqlUpdate Error 4 %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db));
            }
    #endif
        }
        else
        {
            ret = -2;
        }
        if(1 == IsUpdateAll && 0 != ret)
        {
            rollBack(sqlDB);
            return ret;
        }
    
        return ret;
    }
    
    int DBSearch(dbClass *sqlDB, const char *tableName, char *searchWhereStr, char (*returnValue)[SEARCH_MAXLEN])
    {
        if(sqlDB == NULL || tableName == NULL || searchWhereStr == NULL)
        {
            gseLog(L_ERROR,"*db is NULL");
            return -1;
        }
        char *errmsg = 0;
        int ret = 0;
        char sqlSearchTable[MAX_SQLSTR]={0};
        int i;
        int nRow=0,nColumn=0;
    
        if(strlen(searchWhereStr) >= 3)
            searchWhereStr[strlen(searchWhereStr)-3]='\0';
        sprintf(sqlSearchTable, "select * from %s where %s",tableName,searchWhereStr);
        //select * from tb_cardID where cardNum=323435;
        memset(searchWhereStr, 0, strlen(searchWhereStr));
    
        if(sqlDB->type == SQL_SQLITE3)
        {
            gseMutexLock(&dbMutex);
            sqlDB->db = (sqlite3 *)sqlDB->db;
            char **azResult;
            ret = sqlite3_get_table(sqlDB->db, sqlSearchTable, &azResult, &nRow, &nColumn,&errmsg);
            if(ret != SQLITE_OK)
            {
                gseLog(L_ERROR, "%s",sqlSearchTable);
                gseLog(L_ERROR,"ret = %d, search table fail: %s", ret, errmsg);
            }
    //      gseLog(L_INFO,"row:%d column=%d",nRow, nColumn);
            for(i=nColumn;i<(nRow+1)*nColumn;i++)
            {
    //          printf("azResult[%d] = %s\n", i, azResult[i]);
                if(azResult[i] != NULL && (*returnValue + SEARCH_MAXLEN*(i-nColumn)) != NULL)
                    strcpy(*returnValue + SEARCH_MAXLEN*(i-nColumn), azResult[i]);
            }
            sqlite3_free_table(azResult);
            sqlite3_free(errmsg);
            gseMutexUnlock(&dbMutex);
            if(0 == nRow)
                return 1;
            else if(1 <= nRow)
                return 0;
        }
        else if(sqlDB->type == SQL_MYSQL)
        {
    #ifdef MYSQL_DEFINE
            sqlDB->db = (MYSQL *)sqlDB->db;
            ret = mysql_query(sqlDB->db, sqlSearchTable);
            if (ret)
            {
                gseLog(L_ERROR,"sqlSearch Error 4 %u: %s\n", mysql_errno(sqlDB->db), mysql_error(sqlDB->db));
            }
            MYSQL_RES *result;
            MYSQL_ROW row;
            MYSQL_FIELD *field;
            int num_fields;
            result = mysql_store_result(sqlDB->db);
            num_fields = mysql_num_fields(result);
            while ((row = mysql_fetch_row(result)))
            {
                nRow++;
                for(i = 0; i < num_fields; i++)
                {
                    if (i == 0) {
                        while(field = mysql_fetch_field(result)) {
                            printf("%s ", field->name);
                        }
                        printf("\n");
                    }
                    printf("%s  ", row[i] ? row[i] : "NULL");
                }
            }
            printf("\n");
            mysql_free_result(result);
    
            if(nRow == 0)
                return 0;
            else
                return nRow;
    #endif
        }
    
        return -2;
    }
    
    int DBDelete(dbClass *sqlDB, const char *tableName, char *searchWhereStr)
    {
        if(sqlDB == NULL || tableName == NULL || searchWhereStr == NULL)
        {
            gseLog(L_ERROR,"*db is NULL");
            return -1;
        }
        char *errmsg = 0;
        int ret = 0;
        char sqlDeleteTable[MAX_SQLSTR]={0};
        if(strlen(searchWhereStr) >= 3)
        {
            searchWhereStr[strlen(searchWhereStr)-3]='\0';
            sprintf(sqlDeleteTable, "delete from %s where %s", tableName, searchWhereStr);
            memset(searchWhereStr, 0, strlen(searchWhereStr));
        }
        else if(strlen(searchWhereStr) == 0)
            sprintf(sqlDeleteTable, "delete from %s", tableName);
    
        //delete from tb_cardID where cardID=1;
    //  gseLog(L_DEBUG, "%s",sqlDeleteTable);
    
        if(sqlDB->type == SQL_SQLITE3)
        {
            gseMutexLock(&dbMutex);
            sqlDB->db = (sqlite3 *)sqlDB->db;
            ret = sqlite3_exec(sqlDB->db,sqlDeleteTable,NULL,NULL,&errmsg);
            if(ret != SQLITE_OK)
            {
                gseLog(L_ERROR,"ret = %d, delete table fail: %s", ret, errmsg);
            }
            sqlite3_free(errmsg);
            needVacuum = 1;
    #if 0
            if (iDelCount++ > FREE_NUM)
            {
                iDelCount = 0;
                ret = sqlite3_exec(sqlDB->db,"vacuum",NULL,NULL,&errmsg);
                if(ret != SQLITE_OK)
                {
                    gseLog(L_ERROR,"ret = %d, vacuum fail: %s", ret, errmsg);
                }
                sqlite3_free(errmsg);
            }
    #endif
            gseMutexUnlock(&dbMutex);
        }
        else if(sqlDB->type == SQL_MYSQL)
        {
    #ifdef MYSQL_DEFINE
            sqlDB->db = (MYSQL *)sqlDB->db;
            ret = mysql_query(sqlDB->db, sqlDeleteTable);
            if (ret)
            {
                printf("sqlDelete Error %u: %s\n", mysql_errno(sqlDB->db), mysql_error(sqlDB->db));
            }
    #endif
        }
        else
        {
            ret = -2;
        }
        if(1 == IsUpdateAll && 0 != ret)
        {
            rollBack(sqlDB);
            return ret;
        }
    
        return ret;
    }
    
    int DBVacuum(dbClass *sqlDB)
    {
        if(sqlDB == NULL)
        {
            gseLog(L_ERROR,"*db is NULL");
            return -1;
        }
        char *errmsg = 0;
        int ret = 0;
        if(sqlDB->type == SQL_SQLITE3 && 1 == needVacuum)
        {
            gseMutexLock(&dbMutex);
            sqlDB->db = (sqlite3 *)sqlDB->db;
            ret = sqlite3_exec(sqlDB->db,"vacuum",NULL,NULL,&errmsg);
            if(ret != SQLITE_OK)
            {
                gseLog(L_ERROR,"ret = %d, vacuum fail: %s", ret, errmsg);
            }
            else
            {
                needVacuum = 0;
            }
            sqlite3_free(errmsg);
            gseMutexUnlock(&dbMutex);
        }
        return ret;
    }
    
    int DBIndex(dbClass *sqlDB, const char *tableName, char *indexName, char *columnName)
    {
        if(sqlDB == NULL || tableName == NULL || indexName == NULL || columnName == NULL)
        {
            gseLog(L_ERROR,"SQLITE_Index NULL *p"); 
            return -1;
        }
        int ret = 0;
        char *errmsg = 0;
        char sqlCreateIndex[MAX_SQLSTR]={0};
        sprintf(sqlCreateIndex, "create index %s on %s(%s)", indexName, tableName, columnName);
    //  gseLog(L_DEBUG, "%s",sqlCreateIndex);
    
        if(sqlDB->type == SQL_SQLITE3)
        {
            sqlDB->db = (sqlite3 *)sqlDB->db;
            ret = sqlite3_exec(sqlDB->db,sqlCreateIndex,NULL,NULL,&errmsg);
            if(ret != SQLITE_OK)
            {
                gseLog(L_ERROR,"ret = %d, index table fail: %s", ret, errmsg);
            }
            sqlite3_free(errmsg);
        }
        else if(sqlDB->type == SQL_MYSQL)
        {
    #ifdef MYSQL_DEFINE
            sqlDB->db = (MYSQL *)sqlDB->db;
            ret = mysql_query(sqlDB->db, sqlCreateIndex);
            if (ret)
            {
                printf("sqlIndex Error %u: %s\n", mysql_errno(sqlDB->db), mysql_error(sqlDB->db));
            }
    #endif
        }
    
        return ret;
    }
    
    int DBGetIdKey(dbClass *sqlDB, const char *tableName, const char *keyName, char (*returnValue)[ID_KEYLEN])
    {
        if(sqlDB == NULL || tableName == NULL || keyName== NULL)
        {
            gseLog(L_ERROR,"*db is NULL");
            return -1;
        }
        char *errmsg = 0;
        int ret = 0;
        char sqlSearchTable[MAX_SQLSTR]={0};
        int i;
        int nRow=0,nColumn=0;
    
        sprintf(sqlSearchTable, "select %s from %s", keyName, tableName);
    
        if(sqlDB->type == SQL_SQLITE3)
        {
            gseMutexLock(&dbMutex);
            sqlDB->db = (sqlite3 *)sqlDB->db;
            char **azResult;
            ret = sqlite3_get_table(sqlDB->db, sqlSearchTable, &azResult, &nRow, &nColumn,&errmsg);
            if(ret != SQLITE_OK)
            {
                gseLog(L_ERROR, "%s",sqlSearchTable);
                gseLog(L_ERROR,"ret = %d, search table fail: %s", ret, errmsg);
            }
    //      gseLog(L_INFO,"row:%d column=%d",nRow, nColumn);
            for(i=nColumn;i<(nRow+1)*nColumn;i++)
            {
    //          printf("azResult[%d] = %s\n", i, azResult[i]);
                if(azResult[i] != NULL && (*returnValue + ID_KEYLEN*(i-nColumn)) != NULL)
                    strcpy(*returnValue + ID_KEYLEN*(i-nColumn), azResult[i]);
                else
                    break;
            }
            sqlite3_free_table(azResult);
            sqlite3_free(errmsg);
            gseMutexUnlock(&dbMutex);
            if(nRow == 0)
                return 0;
            else
                return nRow;
        }
        else if(sqlDB->type == SQL_MYSQL)
        {
    #ifdef MYSQL_DEFINE
            sqlDB->db = (MYSQL *)sqlDB->db;
            ret = mysql_query(sqlDB->db, sqlSearchTable);
            if (ret)
            {
                gseLog(L_ERROR,"sqlSearch Error 4 %u: %s\n", mysql_errno(sqlDB->db), mysql_error(sqlDB->db));
            }
            MYSQL_RES *result;
            MYSQL_ROW row;
            MYSQL_FIELD *field;
            int num_fields;
            result = mysql_store_result(sqlDB->db);
            num_fields = mysql_num_fields(result);
            while ((row = mysql_fetch_row(result)))
            {
                nRow++;
                for(i = 0; i < num_fields; i++)
                {
                    if (i == 0) {
                        while(field = mysql_fetch_field(result)) {
                            printf("%s ", field->name);
                        }
                        printf("\n");
                    }
                    printf("%s  ", row[i] ? row[i] : "NULL");
                }
            }
            printf("\n");
            mysql_free_result(result);
    
            if(nRow == 0)
                return 0;
            else
                return nRow;
    #endif
        }
    
        return -2;
    }
    
    int DBExecSql(dbClass *sqlDB, const char *sqlStr)
    {
        if(sqlDB == NULL || sqlStr == NULL)
        {
            gseLog(L_ERROR,"*db is NULL");
            return -1;
        }
        char *errmsg = 0;
        int ret = 0;
    
        if(sqlDB->type == SQL_SQLITE3)
        {
            sqlDB->db = (sqlite3 *)sqlDB->db;
            ret = sqlite3_exec(sqlDB->db,sqlStr,NULL,NULL,&errmsg);
            if(ret != SQLITE_OK)
            {
                gseLog(L_ERROR,"ret = %d, exec sql(%s) fail: %s", ret, sqlStr, errmsg);
            }
            sqlite3_free(errmsg);
        }
        else if(sqlDB->type == SQL_MYSQL)
        {
    
        }
    
        return ret;
    }
    
    int dbAddColumn(char *createString, const char *keyName, const char *keyClass)
    {
        if(createString == NULL || keyName == NULL || keyClass == NULL)
            return -1;
        char tmpKey[128];
        sprintf(tmpKey, "%s %s,", keyName, keyClass);
        strcat(createString, tmpKey);
        return 0;
    }
    
    int dbInsertColumn(char *insertString, char *value)
    {
        if(insertString == NULL || value == NULL)
            return -1;
        strcat(insertString,value);
        strcat(insertString,",");
        return 0;
    }
    
    int dbUpdateSet(char *updateSetStr, const char *setKey, char *setValue)
    {
        if(updateSetStr == NULL || setKey == NULL || setValue == NULL)
            return -1;
        char tmpStr[128]={0};
        sprintf(tmpStr, " %s=%s,", setKey, setValue);
        strcat(updateSetStr, tmpStr);
        return 0;
    
    }
    
    int dbSearchWhere(char *searchWhereStr, const char *whereKey, char *whereValue)
    {
        if(searchWhereStr == NULL || whereKey == NULL || whereValue == NULL)
            return -1;
        char tmpStr[128]={0};
        sprintf(tmpStr, " %s=%s and", whereKey, whereValue);
        strcat(searchWhereStr , tmpStr);
        return 0;
    }
    
    int setFlagIsUpdateAll(dbClass *sqlDB, int n)
    {
        int ret= 0;
        IsUpdateAll = n;
        if(-1 == IsUpdateAll)
            ret = rollBack(sqlDB);
        return ret;
    }
    
    int getFlagIsUpdateAll()
    {
        return IsUpdateAll;
    }
    
    int beginExclusive(dbClass *sqlDB)
    {
        int ret=0;
        char *errmsg = 0;
        sqlDB->db = (sqlite3 *)sqlDB->db;
        ret = sqlite3_exec(sqlDB->db,"BEGIN EXCLUSIVE", NULL,NULL, &errmsg);    
        if(ret != SQLITE_OK)
        {
            gseLog(L_ERROR,"ret = %d, BEGIN EXCLUSIVE: %s", ret, errmsg);
        }
        sqlite3_free(errmsg);
    
        return ret;
    }
    
    int commitSQL(dbClass *sqlDB)
    {
        int ret=0;
        char *errmsg = 0;
        sqlDB->db = (sqlite3 *)sqlDB->db;
        ret=sqlite3_exec(sqlDB->db,"COMMIT", NULL,NULL, &errmsg);
        if(ret != SQLITE_OK)
        {
            gseLog(L_ERROR,"ret = %d, COMMIT: %s", ret, errmsg);
        }
        sqlite3_free(errmsg);
    
        return ret;
    }
    
    int rollBack(dbClass *sqlDB)
    {
        int ret=0;
        char *errmsg = 0;
        sqlDB->db = (sqlite3 *)sqlDB->db;
        ret=sqlite3_exec(sqlDB->db,"ROLLBACK", NULL,NULL, &errmsg);
        if(ret != SQLITE_OK)
        {
            gseLog(L_ERROR,"ret = %d, ROLLBACK: %s", ret, errmsg);
        }
        sqlite3_free(errmsg);
        return ret;
    }
    
    #ifdef MAIN_TEST
    void main()
    {
        char createValueStr[MAX_SQLSTR]={0};
        char insertString[MAX_SQLSTR]={0};
        char updateSetStr[MAX_SQLSTR]={0};
        char searchWhereStr[MAX_SQLSTR]={0};
        char *dbFileName="lkdb";
        char *tableName="tb";
        char *colList[]={"ID","names","sexsex"};
        int ret=0;
    
        timeLog();
        dbClass sqlDB;
        sqlDB.type = SQL_SQLITE3;
        DBOpen(&sqlDB, dbFileName, NULL, NULL, NULL);
    
    //  sqlDB.type = SQL_MYSQL;
    //  DBOpen(&sqlDB, dbFileName, "localhost", "root", "mima");
    #if 1
        dbAddColumn(createValueStr, colList[0], PRIMAY_KEY);
        dbAddColumn(createValueStr, colList[1], NVARCHAR_32);
        dbAddColumn(createValueStr, colList[2], NVARCHAR_32);
        DBCreate(&sqlDB, tableName, createValueStr);
    
        dbInsertColumn(insertString, "1");
        dbInsertColumn(insertString, "'y_jg'");
        dbInsertColumn(insertString, "'man'");
        DBInsert(&sqlDB,tableName,insertString);
        dbInsertColumn(insertString, "2");
        dbInsertColumn(insertString, "'lk'");
        dbInsertColumn(insertString, "'man'");
        DBInsert(&sqlDB,tableName,insertString);
        dbInsertColumn(insertString, "3");
        dbInsertColumn(insertString, "'fqq'");
        dbInsertColumn(insertString, "'woman'");
        DBInsert(&sqlDB,tableName,insertString);
        dbInsertColumn(insertString, "4");
        dbInsertColumn(insertString, "'xf'");
        dbInsertColumn(insertString, "'man'");
        DBInsert(&sqlDB,tableName,insertString);
    #endif
        dbUpdateSet(updateSetStr,"names", "'xxxx'");
        dbSearchWhere(searchWhereStr,"id","3");
        DBUpdate(&sqlDB,tableName,updateSetStr,searchWhereStr);
        DBClose(&sqlDB);
    
        timeLog();
    
    }
    #endif
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:linuxCsqlite3mysql
    上一篇:MySQL中EXPLAIN的解释_MySQL 下一篇:用SQL命令查看Mysql数据库大小_MySQL
    Web大前端开发直播班

    相关文章推荐

    • MySQL性能调优之查询优化• mysql怎么增加权限• 夯实MySQL基础的问题归纳• mysql视图与表的区别是什么• 浅析MySQL中的事务隔离级别,聊聊其实现原理

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网