亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? db_operate.c

?? SQILTE3的一些基本函數的封裝,包括文件的創建,打開,添加記錄,查詢記錄,刪除記錄,計算記錄條數和總數
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <include.h>
#include <sqlite3.h>
#include <file_operate.h>
#include <db_operate.h>
#include <error.h>
#include <udplog.h>
#include <common.h>
#include <common_utils.h>

extern char gErrMsg[256];

#define	DB_RETRY		5
#define	DB_SLEEP		(100*1000)




/* used int  internal */
static int DbSelectCount(T_DbOper *pDB,  char *fullsql)
{
	char            *sTail = 0;
	sqlite3_stmt    *stmt = 0;
	int             i = 0;	
	int             ret = -1;
	int				finish;

	if(sqlite3_prepare(pDB->db, fullsql, -1, &stmt, &sTail) != SQLITE_OK)
	{
		udplog ("<SQLITE>%s", fullsql);
		udplog("<SQLITE>Error in DbSelectCount A:%s", sqlite3_errmsg(pDB->db));
		return E_DB_PREPARE;
	}	

	for (i=0, finish=0; i<DB_RETRY; i++)
	{
		switch(sqlite3_step(stmt))
		{
			case SQLITE_ROW:
				if(sqlite3_column_count(stmt) <= 0) 
				{
					ret = E_DB_NOCLOUMN; 
					finish = 1;
					break;
				}
				ret = sqlite3_column_int(stmt, 0);
				sqlite3_finalize(stmt);
				return ret;
		
			case SQLITE_BUSY:
				ret = E_DB_BUSY; 
				break;
				
			case SQLITE_DONE:
			    ret = E_DB_SELECTDONE;
			    finish = 1;
			    break;				
			case SQLITE_ERROR:
			case SQLITE_MISUSE:
			default:
				ret = E_DB_RECSET;
				break;
		}
		if (finish == 1)
		{
			break;
		}
	}

	sqlite3_finalize(stmt);
	udplog ("<SQLITE>%s", fullsql);
	udplog("<SQLITE>Error in DbSelectCount B:%s", sqlite3_errmsg(pDB->db));
	return ret;
    
}

#if 0
int DbCreat (T_DbOper *pDb, char *file)
{
	char	lock[200];
	char *p;
	
	snprintf (lock, sizeof(lock), "%s", file);
	
	if (( p = strstr (lock, DB_FILE_EXTEND)) == NULL)
	{
		udplog ("<SQLITE>%s", "the file name is error");
		return E_DB_WRONG_FILE;
	}
	snprintf (p, sizeof(lock)-(p-lock), "%s", LOCK_FILE_EXTEND);

	if (CheckExist (file) == 0)		//not exist
	{
		udplog ("<SQLITE>%s not exist, will creat it", file);
		if(sqlite3_open(file, &(pDb->db)) != SQLITE_OK)
		{
			udplog ("<SQLITE>%s[%s]", sqlite3_errmsg(pDb->db), file);
			return E_DB_OPEN;
		}
		
		if ( (pDb->fd = open (lock, O_RDWR|O_CREAT)) < 0)
		{
			udplog ("<SQLITE>%s[%s]", "Can't open the file to lock", strerror(errno));
			sqlite3_close (pDb->db);
			return E_DB_OPEN;
		}

		#ifndef CORETREX
		if (chmod (lock, S_IXOTH|S_IWOTH|S_IROTH|S_IXGRP|S_IWGRP|S_IRGRP|S_IXUSR|S_IWUSR|S_IRUSR) != 0)
		{
			udplog ("chmod failed");
		}
		if (chmod (file, S_IXOTH|S_IWOTH|S_IROTH|S_IXGRP|S_IWGRP|S_IRGRP|S_IXUSR|S_IWUSR|S_IRUSR) != 0)
		{
			udplog ("chmod failed");
		}
		#endif
		
		if ( lockf (pDb->fd, F_TLOCK, 0) == 0 )		//lock ok
		{
			pDb->opened = OPENNED;
			pDb->selected = UNSELECT;
			return 0;
		}
		else
		{
			udplog ("<SQLITE>%s[%s]", "the file is locked, please wait", strerror(errno));
			close (pDb->fd);
			sqlite3_close (pDb->db);
			return E_DB_LOCK;
		}
	}
	else			//it's exist
	{
		if ( (pDb->fd = open (lock, O_RDWR)) < 0)
		{
			udplog ("<SQLITE>%s", "Can't open the file to lock");
			return E_DB_OPEN;
		}
		if (lockf (pDb->fd, F_TLOCK, 0) != 0)			//lock failed
		{
			udplog ("<SQLITE>%s", "the file is locked, please wait");
			close (pDb->fd);
			return E_DB_LOCK;
		}		
		if(sqlite3_open(file, &(pDb->db)) != SQLITE_OK)
		{
			udplog ("<SQLITE>%s", sqlite3_errmsg(pDb->db));
			close (pDb->fd);
			return E_DB_OPEN;
		}
		else
		{
			pDb->opened = OPENNED;
			pDb->selected = UNSELECT;
			return 0;
		}
	}
}
#endif
/*
open an database file and lock it, if the file is not exist, will creat it.
return:	0	open ok
		E_DB_OPEN	open faile
		E_DB_LOCK	lock by others
*/
int DbOpen (T_DbOper *pDb, char *file)
{
	char	lock[200];
	char *p;
	
	snprintf (lock, sizeof(lock), "%s", file);
	
	if (( p = strstr (lock, DB_FILE_EXTEND)) == NULL)
	{
		udplog ("<SQLITE>%s", "the file name is error");
		return E_DB_WRONG_FILE;
	}
	snprintf (p, sizeof(lock)-(p-lock), "%s", LOCK_FILE_EXTEND);

	if (CheckExist (file) == 0)		//not exist
	{
		udplog ("<SQLITE>%s not exist, will creat it", file);
		if(sqlite3_open(file, &(pDb->db)) != SQLITE_OK)
		{
			udplog ("<SQLITE>%s[%s]", sqlite3_errmsg(pDb->db), file);
			return E_DB_OPEN;
		}
		
		if ( (pDb->fd = open (lock, O_RDWR|O_CREAT)) < 0)
		{
			udplog ("<SQLITE>%s[%s]", "Can't open the file to lock", strerror(errno));
			sqlite3_close (pDb->db);
			return E_DB_OPEN;
		}

		#ifndef CORETREX
		if (chmod (lock, S_IXOTH|S_IWOTH|S_IROTH|S_IXGRP|S_IWGRP|S_IRGRP|S_IXUSR|S_IWUSR|S_IRUSR) != 0)
		{
			udplog ("chmod failed");
		}
		if (chmod (file, S_IXOTH|S_IWOTH|S_IROTH|S_IXGRP|S_IWGRP|S_IRGRP|S_IXUSR|S_IWUSR|S_IRUSR) != 0)
		{
			udplog ("chmod failed");
		}
		#endif
		
		if ( lockf (pDb->fd, F_TLOCK, 0) == 0 )		//lock ok
		{
			pDb->opened = OPENNED;
			pDb->selected = UNSELECT;
			return 0;
		}
		else
		{
			udplog ("<SQLITE>%s[%s]", "the file is locked, please wait", strerror(errno));
			close (pDb->fd);
			sqlite3_close (pDb->db);
			return E_DB_LOCK;
		}
	}
	else			//it's exist
	{
		if ( (pDb->fd = open (lock, O_RDWR)) < 0)
		{
			udplog ("<SQLITE>%s", "Can't open the file to lock");
			return E_DB_OPEN;
		}
		if (lockf (pDb->fd, F_TLOCK, 0) != 0)			//lock failed
		{
			udplog ("<SQLITE>%s", "the file is locked, please wait");
			close (pDb->fd);
			return E_DB_LOCK;
		}
		if(sqlite3_open(file, &(pDb->db)) != SQLITE_OK)
		{
			udplog ("<SQLITE>%s", sqlite3_errmsg(pDb->db));
			close (pDb->fd);
			return E_DB_OPEN;
		}
		else
		{
			pDb->opened = OPENNED;
			pDb->selected = UNSELECT;
			return 0;
		}
	}
}


/*
close database
return:	0 ok
		E_BD_UNLOCK unlock the file failed
*/
int DbClose (T_DbOper *pDb)
{
	if (pDb->selected == SELECTED)		//it's selected, must end select
	{
		sqlite3_finalize(pDb->stmt);
	}
	sqlite3_close (pDb->db);
	if (lockf (pDb->fd, F_ULOCK, 0) != 0)
	{
		udplog ("<SQLITE>%s", "unlock the file failed");
		return E_BD_UNLOCK;
	}
	close (pDb->fd);
	pDb->opened = UNOPEN;
	return 0;
}

int DbExecute (T_DbOper *pDb, char *sql, ...)
{
	va_list ap;
	char *fullSql;
	char *errMsg;

	if (pDb->opened == UNOPEN)	//not open
	{
		udplog ("<SQLITE>data base wasn't opened");
		return E_DB_UNOPEN;
	}
	va_start (ap, sql);
	fullSql = sqlite3_vmprintf (sql, ap);
	va_end (ap);

	#ifdef DEBUG_SQLITE
	udplog ("<SQLITE>%s", fullSql);
	printf ("<SQLITE>%s", fullSql);
	#endif
	
	if (sqlite3_exec (pDb->db, fullSql, 0, 0, &errMsg) == SQLITE_OK)	//execute ok
	{
		sqlite3_free (fullSql);
		return 0;
	}
	else
	{
	#ifndef DEBUG_SQLITE
		udplog ("<SQLITE>DbExecute error[%s]", fullSql);
		printf ("<SQLITE>DbExecute error[%s]", fullSql);
	#endif
		udplog ("<SQLITE>the reason is:%s", errMsg);
		printf ("<SQLITE>the reason is:%s", errMsg);
		sqlite3_free(fullSql);
		sqlite3_free(errMsg);
		return E_DB_EXECUTE;
	}
}

/*
begin call select
NOTE:
	1. don't call db_bgselect() again if the pDB already called db_bgnselect() unless u call db_endselect(), otherwise it will
		return ERR_DB_INSELECT, which means the dabase is in select.
	2. don't excute a transaction during db_bgnselect(), because the database will be locked after db_bgnselect(), 
		transactions can't be commited. call db_endselect() before commiting a transaction!!!
	3. don't call this function to a closed database, otherwise it will return ERR_DB_TRYCLOSEDDB
*/

int DbBeginSelect (T_DbOper *pDb, char *sql, ...)
{
	char *sTail;
	va_list ap;
	char *fullSql;

	if (pDb->opened == UNOPEN)
	{
		return E_DB_UNOPEN;
	}
	if (pDb->selected == SELECTED)	//already selected by others
	{
		return E_DB_SELECTED;
	}
	
	va_start(ap, sql);
	fullSql=sqlite3_vmprintf(sql, ap);
	va_end(ap);
	
	#ifdef DEBUG_SQLITE
	udplog ("<SQLITE>%s", fullSql);
	#endif

	if(SQLITE_OK == sqlite3_prepare(pDb->db, fullSql, -1, &(pDb->stmt), &sTail)) 
	{
		pDb->selected = SELECTED;
		sqlite3_free(fullSql);
		return 0;
	}
	else 
	{
	#ifndef DEBUG_SQLITE
		udplog ("<SQLITE>DbBeginSelect error[%s]", fullSql);
	#endif
		udplog ("<SQLITE>the reason is:%s", sqlite3_errmsg(pDb->db));
		pDb->selected = UNSELECT;
		sqlite3_free(fullSql);
		return E_DB_PREPARE;
	}
}

/* this return value > 0 */
int DbQureyNext (T_DbOper *pDb)
{
	int	i;
	int	iRet = 0;

	if (pDb->opened == UNOPEN)
	{
		return E_DB_UNOPEN;
	}
	if (pDb->selected == UNSELECT)
	{
		return E_DB_NOTPREPARE;
	}
	
	for (i=0; i<DB_RETRY; i++)
	{
		switch(sqlite3_step(pDb->stmt))
		{
			case SQLITE_ROW:
				return 1;
		
			case SQLITE_DONE:
				return 0;
				
			case SQLITE_BUSY:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区伦理| 成人妖精视频yjsp地址| 国产日本一区二区| 在线观看亚洲精品视频| 国产盗摄视频一区二区三区| 亚洲h在线观看| 日韩一区中文字幕| 欧美videos中文字幕| 在线中文字幕不卡| 国产suv精品一区二区883| 日韩综合小视频| 亚洲人成精品久久久久| 久久久久久久综合狠狠综合| 欧美精品18+| 色成人在线视频| 成人18视频在线播放| 狠狠色综合色综合网络| 日韩电影在线观看一区| 一区二区三区日韩精品| 国产精品久久久久一区 | 日韩一级精品视频在线观看| 99久久精品国产毛片| 国产精品66部| 极品少妇xxxx精品少妇| 青青青爽久久午夜综合久久午夜| 亚洲精品美国一| 国产精品久线在线观看| 精品少妇一区二区三区免费观看| 色综合中文综合网| 亚洲高清不卡在线观看| 一区二区三区四区精品在线视频| 精品少妇一区二区三区| 日韩女优电影在线观看| 欧美亚洲综合另类| 91福利国产精品| 99精品视频免费在线观看| 丝袜诱惑制服诱惑色一区在线观看 | 国产一区二区三区四区在线观看| 亚洲国产色一区| 亚洲一区二区三区不卡国产欧美| 国产精品久久久久影院| 国产精品动漫网站| 中文字幕精品一区二区精品绿巨人| 欧洲av在线精品| 欧美亚洲高清一区| 色噜噜狠狠一区二区三区果冻| 97精品国产露脸对白| 成人黄色小视频| 91美女视频网站| 色综合久久综合中文综合网| 成人h版在线观看| 北条麻妃国产九九精品视频| 顶级嫩模精品视频在线看| 亚洲va国产天堂va久久en| 亚洲综合视频在线观看| 亚洲成人精品一区二区| 午夜精品一区二区三区三上悠亚 | 日本一区二区三区电影| 中文字幕在线观看不卡视频| 亚洲欧洲在线观看av| 亚洲午夜精品久久久久久久久| 亚洲综合精品自拍| 久久精品噜噜噜成人av农村| 乱中年女人伦av一区二区| 国产福利一区二区三区视频在线 | 精品国产伦一区二区三区观看体验 | 激情文学综合插| 国产九色sp调教91| 国产成人在线视频播放| 在线精品视频免费观看| 欧美午夜精品免费| 日韩精品一区二区三区swag| www欧美成人18+| 国产精品福利一区| 亚洲综合成人网| 狠狠色伊人亚洲综合成人| 风间由美一区二区三区在线观看 | 欧美欧美欧美欧美| 欧美一区二区三区公司| 日本一区二区三区四区在线视频| 中文字幕成人av| 亚洲国产成人91porn| 日韩国产一区二| 久久99精品久久久久久国产越南| 激情综合五月婷婷| 国产一区二区剧情av在线| 91免费观看视频在线| 欧美日韩国产首页在线观看| 中文字幕av一区二区三区| 日韩毛片精品高清免费| 久久激情五月婷婷| 国产91精品入口| 538在线一区二区精品国产| 久久免费视频色| 五月婷婷激情综合网| 精品亚洲成a人| 在线观看www91| 久久人人97超碰com| 国产精品久久久久精k8| 爽爽淫人综合网网站| 日本一区中文字幕| av亚洲精华国产精华精华| 欧美视频精品在线观看| 国产人成一区二区三区影院| 亚洲成av人片在线观看| 国产精品18久久久久久久久| fc2成人免费人成在线观看播放| 欧美成人艳星乳罩| 最近中文字幕一区二区三区| 国产又粗又猛又爽又黄91精品| 91久久线看在观草草青青| 欧美激情自拍偷拍| 狠狠色狠狠色综合| 制服丝袜av成人在线看| 一区二区三区丝袜| 色婷婷亚洲精品| 久久在线免费观看| 老汉av免费一区二区三区| 91丨九色丨黑人外教| 欧美国产亚洲另类动漫| 天堂va蜜桃一区二区三区漫画版| 欧美在线观看18| 久久久一区二区| 国产麻豆成人传媒免费观看| 欧美日韩国产综合久久| 亚洲电影中文字幕在线观看| 波多野结衣在线aⅴ中文字幕不卡| 久久久久国产精品人| 日本在线不卡一区| 日韩一区二区三区视频在线观看| 一区二区三区国产豹纹内裤在线| av亚洲精华国产精华精华| 国产亚洲综合av| 国产高清不卡一区二区| www激情久久| 国产一区不卡在线| 日韩欧美一区在线| 另类的小说在线视频另类成人小视频在线| 欧美专区亚洲专区| 亚洲va国产天堂va久久en| 色猫猫国产区一区二在线视频| 一区二区三区四区国产精品| 成人的网站免费观看| 国产精品网站一区| 成人99免费视频| 中文字幕中文字幕在线一区| 色综合天天做天天爱| 中文字幕中文字幕中文字幕亚洲无线 | 亚洲久本草在线中文字幕| 99精品视频中文字幕| 亚洲一区二区三区美女| 91久久人澡人人添人人爽欧美 | 亚洲色图在线视频| 成人晚上爱看视频| 国产精品国产精品国产专区不蜜 | 国产麻豆一精品一av一免费 | 久久精品国产亚洲高清剧情介绍| 91麻豆精品91久久久久久清纯| 日韩精品一级中文字幕精品视频免费观看| 色欧美片视频在线观看在线视频| 夜夜爽夜夜爽精品视频| 欧美影片第一页| 美女高潮久久久| 欧美精品一区二区三区蜜桃视频 | 国产精品视频第一区| 色噜噜夜夜夜综合网| 亚洲高清免费在线| 久久嫩草精品久久久精品一| 国产精品一线二线三线精华| 亚洲欧美激情在线| 色综合中文字幕国产 | 亚洲欧美激情插| 69p69国产精品| 久久99热狠狠色一区二区| 国产精品国产自产拍高清av王其| 91丨九色丨尤物| 精品中文字幕一区二区| 国产午夜精品福利| 欧美在线一区二区| 日本亚洲天堂网| 亚洲视频免费在线观看| 欧美日本韩国一区二区三区视频| 国产成人在线色| 一区二区三区国产| 亚洲精品一区二区三区四区高清| 国产一区二区三区观看| 亚洲自拍偷拍九九九| 91 com成人网| 97久久人人超碰| 日韩精品成人一区二区三区| 国产欧美日产一区| 制服丝袜中文字幕一区| 国产精品系列在线观看| 亚洲图片欧美一区| 久久久久国产免费免费 | 精品免费国产二区三区| 色综合久久久久久久久久久| 狠狠色狠狠色合久久伊人| 亚洲人成亚洲人成在线观看图片| 久久综合九色综合欧美98|