视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
linuxCsqlite3mysql_MySQL
2020-11-09 20:06:55 责编:小采
文档


/* ********** 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[]={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[]={0};
 char useDbStr[]={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

下载本文
显示全文
专题