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

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

?? db_operate.c

?? SQILTE3的一些基本函數的封裝,包括文件的創建,打開,添加記錄,查詢記錄,刪除記錄,計算記錄條數和總數
?? C
?? 第 1 頁 / 共 2 頁
字號:
				iRet = E_DB_BUSY;
				break;
				
			case SQLITE_ERROR:
			case SQLITE_MISUSE:
			default:
				iRet = E_DB_RECSET; 
				break;
		}
		usleep(DB_SLEEP);
	}
	return iRet;
}

int DbEndSelect (T_DbOper *pDb)
{	
	if (pDb->opened == UNOPEN)
	{
		return E_DB_UNOPEN;
	}
	if (pDb->selected == UNSELECT)	//not select
	{
		return 0;
	}
	else
	{
		pDb->selected = UNSELECT;		
		sqlite3_finalize(pDb->stmt);
		return 0;
	}
}

int DbCell2Txt (T_DbOper *pDb, char *cellName, char *value, int size)
{
	int	i;
	int	colNum;
	
	if (pDb->opened == UNOPEN)
	{
		return E_DB_UNOPEN;
	}
	if (pDb->selected == UNSELECT)
	{
		return E_DB_NOTPREPARE;
	}

	if ((colNum = sqlite3_column_count (pDb->stmt)) <= 0)
	{
		return E_DB_NOCLOUMN;
	}

	for (i=0; i<colNum; i++)
	{
		if (!strcmp (sqlite3_column_name (pDb->stmt, i), cellName))
		{
			switch (sqlite3_column_type (pDb->stmt, i))
			{
				case SQLITE_INTEGER:
					snprintf (value, size, "%d", sqlite3_column_int (pDb->stmt, i));
					return 0;
				case SQLITE_TEXT:
					snprintf (value, size, "%s", sqlite3_column_text (pDb->stmt, i));
					return 0;
				case SQLITE_NULL:
					snprintf (value, size, "%s", "(null)");
					return 0;
				case SQLITE_FLOAT:
					snprintf (gErrMsg, sizeof(gErrMsg), "(%s)", "FLOAT");
					return E_DB_NOTSURPPORT;
				case SQLITE_BLOB:
					snprintf (gErrMsg, sizeof(gErrMsg), "(%s)", "BLOB");
					return E_DB_NOTSURPPORT;
			}
		}
	}
	snprintf (gErrMsg, sizeof(gErrMsg), "(%s)", cellName);
	return E_DB_NOCLOUMNNAME;
}









int DbCell2Int (T_DbOper *pDb, char *cellName, int *retvalue)
{
	int	i;
	int	colNum;
	char *pText;
	
	if (pDb->opened == UNOPEN)
	{
		return E_DB_UNOPEN;
	}
	if (pDb->selected == UNSELECT)
	{
		return E_DB_NOTPREPARE;
	}

	if ((colNum = sqlite3_column_count (pDb->stmt)) <= 0)
	{
		return E_DB_NOCLOUMN;
	}

	for (i=0; i<colNum; i++)
	{
		if (!strcmp (sqlite3_column_name (pDb->stmt, i), cellName))
		{
			switch (sqlite3_column_type (pDb->stmt, i))
			{
				case SQLITE_INTEGER:					
					*retvalue = sqlite3_column_int(pDb->stmt, i);
					return 0;
				case SQLITE_TEXT:
					pText = (char *)sqlite3_column_text(pDb->stmt, i);
					if(strlen(pText) == 0)
					{
						return E_DB_TXTEMPTY;
					}				    
					if(IsNumberString(pText) < 0)
					{   					     
						return E_DB_NOTNUM;
				    }
					*retvalue = atoi(pText);
					return 0;
				case SQLITE_BLOB:	//not implemented yet.
					snprintf (gErrMsg, sizeof(gErrMsg), "(%s)", "BLOB");
					return E_DB_NOTSURPPORT;

				case SQLITE_NULL:
					*retvalue = 0;
					return 0;
				default:
					return E_DB_NOTSURPPORT;
			}
		}
	}
	snprintf (gErrMsg, sizeof(gErrMsg), "(%s)", cellName);
	return E_DB_NOCLOUMNNAME;
}

#if 0
int DbCountDistinct(T_DbOper *pDB, char *tablename, char *item, char *where, ...)
{
	va_list ap;
	char *fullsql = 0, *fullwhere = 0;
	
	int ret = -1;
	int retry = 0;	//retry times
	
	if (pDB->opened == UNOPEN)	//not open
	{
		udplog ("<SQLITE>data base wasn't opened");
		return E_DB_UNOPEN;
	}

	if(where)
	{
		va_start(ap, where);
		fullwhere = sqlite3_vmprintf(where, ap);
		va_end(ap);
		
        /* use %s here, because fullwhere already formated by sqlite3_vmprintf() */
		fullsql = sqlite3_mprintf("select count (*) from (select DISTINCT %q  from %q where %s)",
		                          item, tablename, fullwhere);	
	}
	else
	{
		fullsql = sqlite3_mprintf("select count (*) from (select DISTINCT %q from %q)",
		                          item, tablename);
	}

	ret = DbSelectCount(pDB, fullsql);

	sqlite3_free(fullsql); 
	if(where)
	{   
		sqlite3_free(fullwhere);
	}

    return ret;

	
}
#endif
/*
this call will use "select count(*)" to get the record count in db's table.
tablename: the table name to be counted
where: the sql's where condition, eg: "sex=1 and age>=20 and age<60", this parameter accepts variable parameter

NOTE: this call can also be successful even the during db_bgnselect(), because this function doesn't call db_bgnselect() to 
		implement, it call sqlite3_prepare() - the original sqlite function.
*/
int DbCount(T_DbOper *pDB, char *tablename, char *where, ...)
{
	va_list ap;
	char *fullsql = 0;
	char *fullwhere = 0;
	int   ret = -1;
	
	
	if (pDB->opened == UNOPEN)	//not open
	{
		udplog ("<SQLITE>data base wasn't opened");
		return E_DB_UNOPEN;
	}

	if(where)
	{
		va_start(ap, where);
		fullwhere = sqlite3_vmprintf(where, ap);
		va_end(ap);
		
        /* use %s here, because fullwhere already formated by sqlite3_vmprintf() */
		fullsql = sqlite3_mprintf("select count(*) from %q where %s", 
		                          tablename, fullwhere);
	}
	else
	{
		fullsql=sqlite3_mprintf("select count(*) from %q", tablename);
	}

	#ifdef DEBUG_SQLITE
	udplog ("<SQLITE>%s", fullsql);
	#endif

	ret = DbSelectCount(pDB, fullsql);
    
	sqlite3_free(fullsql); 
	if(where)
	{   
	    sqlite3_free(fullwhere);
    }

    return ret;
}

/*
this function will call "select sum(xxx)" to get the table field's summary, if error occurs during this function, it will return 
	false and errorno will be set.
INPUT:
	pDB: pointer to db
	tablename: the table to be summarized
	sum: the field name to be summarized
	where: the condition string, eg: "sex=1 and age>=20 and age<60", this parameter accepts variable parameter
OUTPUT: 
	*retval: the summary value will be saved into *retval
*/
int DbSum(T_DbOper *pDB, char *tablename, char *sum, char *where, ...)
{
	va_list ap;
	char *fullsql, *fullwhere;
	int ret = -1;
	
	if (pDB->opened == UNOPEN)	//not open
	{
		udplog ("<SQLITE>data base wasn't opened");
		return E_DB_UNOPEN;
	}

	va_start(ap, where);
	fullwhere = sqlite3_vmprintf(where, ap);
	va_end(ap);

    /* use %s here, because fullwhere already formated by sqlite3_vmprintf() */
    if (where)/* bug, when where point is empty, this is error sql */
    {
	    fullsql = sqlite3_mprintf("select sum(%q) from %q where %s", sum, tablename, fullwhere);
    }
    else
    {
        fullsql = sqlite3_mprintf("select sum(%q) from %q ", sum, tablename);
    }

	#ifdef DEBUG_SQLITE
	udplog ("<SQLITE>%s", fullsql);
	#endif

	ret = DbSelectCount(pDB, fullsql);

	sqlite3_free(fullsql);
	sqlite3_free(fullwhere);

	return ret;	
}

/*
this function will call sql "update ..." to update record, the sql must be "update ...."
if something wrong, return <0, otherwise return rows been updated.
*/
int DbUpdate(T_DbOper *pDB, char *sql, ...)
{
	va_list ap;
	char *fullsql;
	int ret;

	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);
	#endif
	
	if(SQLITE_OK == sqlite3_exec(pDB->db, fullsql, 0, 0, 0))
	{
		sqlite3_free(fullsql);
		ret = sqlite3_changes(pDB->db);

		if( 0 == ret) 
		{
		    return E_DB_UPDATE;
	    }
	    
		return ret;
	}
	else 
	{	
	#ifndef DEBUG_SQLITE
		udplog ("<SQLITE>DbUpdate error[%s]", fullsql);
	#endif
		udplog ("<SQLITE>the reason is:%s", sqlite3_errmsg(pDB->db));	
		sqlite3_free(fullsql); 
		return E_DB_EXECUTE;
	}
	
}

/*
this function is a combo call to db_bgnselect(), db_qrynext(), db_endselect(), user entered sql, and if everything is ok, 
he can just call db_cell2int(), db_cell2txt() directly.
*/
int DbOnerecord(T_DbOper *pDB, char *sql, ...)
{
	va_list ap;
	char *fullsql;
	int ret = -1;

	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);

    ret = DbBeginSelect(pDB, "%s", fullsql);
    if( ret != 0)
    {
        return ret;
    }

    ret = DbQureyNext(pDB);
    if( ret < 0)/* error ? */
    {
        DbEndSelect(pDB);
    }
    
    return ret; 
}

/*
return the last insert record's id (primary int key)
*/
int DbLastInsertId(T_DbOper *pDB)
{
	if (pDB->opened == UNOPEN)	//not open
	{
		udplog ("<SQLITE>data base wasn't opened");
		return E_DB_UNOPEN;
	}
	
	return (int)sqlite3_last_insert_rowid(pDB->db);
}
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品日韩精品欧美在线 | 亚洲黄色小视频| 国产不卡视频一区| 国产精品国产自产拍高清av王其 | 成人av综合一区| 亚洲四区在线观看| 欧美日韩视频第一区| 日韩精品三区四区| 久久久亚洲精品一区二区三区| 国产精品一区二区在线观看不卡| 中文字幕欧美国产| 色999日韩国产欧美一区二区| 国产乱码精品一品二品| 国产三级一区二区三区| 成人涩涩免费视频| 亚洲第一精品在线| 久久久天堂av| 在线观看不卡一区| 久久国产精品72免费观看| 国产欧美日韩卡一| 欧美日本一区二区| 国产99久久久国产精品免费看| 亚洲伦理在线免费看| 91麻豆精品国产91久久久久| 国产精品91一区二区| 亚洲图片欧美综合| 久久久亚洲午夜电影| 欧美日韩一区二区三区免费看| 久久爱www久久做| 亚洲激情网站免费观看| 日韩你懂的在线播放| 91丨porny丨最新| 精彩视频一区二区三区| 一个色妞综合视频在线观看| 精品少妇一区二区三区视频免付费| www.亚洲激情.com| 美女久久久精品| 亚洲免费av在线| 国产情人综合久久777777| 欧美日韩成人综合| 91热门视频在线观看| 国产一区二区精品在线观看| 亚洲成人三级小说| 国产精品美女一区二区| 精品国产免费人成在线观看| 色婷婷久久综合| 高清av一区二区| 日本成人超碰在线观看| 亚洲午夜免费电影| 国产精品免费网站在线观看| 日韩精品一区二区三区视频| 欧美日韩国产bt| 在线精品视频一区二区| 播五月开心婷婷综合| 国产一区二区三区av电影| 日韩电影免费在线看| 亚洲午夜私人影院| 一区二区在线观看av| 日本一区二区三区国色天香| 欧美精品一区二区精品网| 91精品国产综合久久久久久| 91麻豆国产自产在线观看| 丰满少妇久久久久久久| 韩国中文字幕2020精品| 美腿丝袜亚洲色图| 日本网站在线观看一区二区三区| 亚洲一区二区三区自拍| 亚洲精品视频免费观看| 日韩理论片网站| 一区二区三区四区不卡在线| 亚洲三级电影网站| 亚洲人成影院在线观看| 亚洲色图另类专区| 亚洲欧美视频在线观看| 亚洲欧美福利一区二区| 亚洲免费看黄网站| 亚洲码国产岛国毛片在线| 一区二区三区久久久| 伊人婷婷欧美激情| 婷婷开心激情综合| 日韩不卡在线观看日韩不卡视频| 日韩电影在线免费| 久久精品免费观看| 国产在线一区观看| 豆国产96在线|亚洲| 波多野结衣在线一区| av一本久道久久综合久久鬼色| av一区二区三区黑人| 在线观看日产精品| 欧美一区二区三区日韩视频| 日韩精品中文字幕在线不卡尤物| 久久网站最新地址| 亚洲视频在线一区观看| 一级女性全黄久久生活片免费| 午夜精品国产更新| 精品亚洲国内自在自线福利| 国产乱妇无码大片在线观看| 成人精品在线视频观看| 欧美一a一片一级一片| 欧美一区二区三区小说| 久久你懂得1024| 国产精品久久午夜夜伦鲁鲁| 亚洲色图在线播放| 日韩 欧美一区二区三区| 久久69国产一区二区蜜臀| 成人免费三级在线| 欧美日韩视频在线观看一区二区三区| 日韩亚洲欧美在线| 国产精品私人自拍| 亚洲第一电影网| 国产**成人网毛片九色| 欧美视频中文字幕| 久久影院电视剧免费观看| 亚洲欧美在线视频观看| 日韩成人免费电影| 不卡电影一区二区三区| 欧美一区二区黄| 国产精品久久久久久福利一牛影视| 亚洲电影中文字幕在线观看| 国产不卡视频一区二区三区| 欧美日韩一区小说| 国产欧美精品在线观看| 天天操天天综合网| 99精品国产热久久91蜜凸| 日韩一区二区三区在线| 椎名由奈av一区二区三区| 另类人妖一区二区av| 色综合天天综合色综合av| 欧美电影免费观看高清完整版 | www精品美女久久久tv| 亚洲欧美区自拍先锋| 经典三级在线一区| 在线播放欧美女士性生活| 亚洲天堂精品在线观看| 国产高清在线观看免费不卡| 欧美日韩精品久久久| 中文字幕亚洲区| 国产一区二区导航在线播放| 91精品在线观看入口| 伊人一区二区三区| a级高清视频欧美日韩| 久久久蜜臀国产一区二区| 视频一区欧美日韩| 欧美亚洲免费在线一区| 亚洲日本一区二区| 福利一区二区在线| 国产拍揄自揄精品视频麻豆| 免费成人在线视频观看| 欧美乱妇20p| 亚洲中国最大av网站| 99国产精品久久久久久久久久| 久久久久久综合| 国模一区二区三区白浆| 日韩亚洲欧美综合| 蜜桃久久精品一区二区| 337p亚洲精品色噜噜噜| 性感美女久久精品| 欧美丝袜自拍制服另类| 亚洲图片一区二区| 欧美日韩成人高清| 日韩中文字幕一区二区三区| 欧美日韩一区在线| 日日噜噜夜夜狠狠视频欧美人 | 日韩午夜av一区| 秋霞午夜av一区二区三区| 欧美巨大另类极品videosbest| 亚洲国产aⅴ成人精品无吗| 欧美三级日本三级少妇99| 亚洲图片有声小说| 欧美日本在线播放| 美日韩黄色大片| 精品国产百合女同互慰| 国产精品77777| 国产精品色呦呦| 精品不卡在线视频| 国产伦精品一区二区三区免费迷| 精品奇米国产一区二区三区| 国产一区二区电影| 综合久久综合久久| 欧美午夜一区二区三区| 天天av天天翘天天综合网| 91精品国产综合久久久久久久久久| 美女在线视频一区| 久久先锋资源网| 色综合久久综合| 午夜精品一区二区三区免费视频 | 亚洲欧洲美洲综合色网| 97精品电影院| 亚洲成av人片在www色猫咪| 日韩欧美国产麻豆| 成人精品一区二区三区中文字幕| 亚洲欧美韩国综合色| 337p亚洲精品色噜噜| 国产一区中文字幕| 亚洲色图19p| 日韩三级精品电影久久久| 国产91对白在线观看九色| 亚洲精品国产一区二区精华液| 欧美日韩免费一区二区三区视频| 久久99精品久久久久久动态图 |