⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbfun.c

📁 一个公关系统的后台程序
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <mysql/mysql.h>#include "jvod.h"#include "datapoolds.h"#include "dbfun.h"#if VERJSconst char *server_groups[]={	"ktv_server","embedded","server",NULL};#endifstatic MYSQL 		ktv_MYSQL;static MYSQL_RES 	*g_Rst,*g_RstSinger;dbErr dbGetRow(void *ret,dataTypeDef dataType);dbErr dbGetRow(void *ret,dataTypeDef dataType){	MYSQL_ROW temp_row;	if(dataType==dataSinger)	{		singerDef *singer=(singerDef*)ret;		temp_row=mysql_fetch_row(g_RstSinger);		if(!temp_row)			return dbEOF;		if(mysql_num_fields(g_RstSinger)<2)			return dbFailFieldNumber;				strcpy(singer->name,temp_row[0]?temp_row[0]:"NULL");		strcpy(singer->filePath,temp_row[1]?temp_row[1]:"NULL");		return dbSuccess;	}		temp_row=mysql_fetch_row(g_Rst);	if(!temp_row)		return dbEOF;	switch(dataType)	{		case dataGame:		{			J8 buf[10];			gameDef* game=(gameDef*)ret;			if(mysql_num_fields(g_Rst)<5)				return dbFailFieldNumber;			strcpy(buf,temp_row[0]?temp_row[0]:"1000\0");			game->ID=atoi(buf);			strcpy(game->name,temp_row[1]?temp_row[1]:"NULL");			strcpy(game->filePath,temp_row[2]?temp_row[2]:"NULL");			strcpy(game->singerName,temp_row[3]?temp_row[3]:"NULL");			memset(buf,0,10);			strcpy(buf,temp_row[4]?temp_row[4]:"1\0");			game->soundType=atoi(buf);			return dbSuccess;		}		case dataGirl:		{			girlDef* girl=(girlDef*)ret;			if(mysql_num_fields(g_Rst)<4)				return dbFailFieldNumber;			girl->state = atoi(temp_row[0]);			strcpy(girl->name,temp_row[1]?temp_row[1]:"NULL");			strcpy(girl->filePath,temp_row[2]?temp_row[2]:"NULL");			strcpy(girl->desc,temp_row[3]?temp_row[3]:"NULL");			return dbSuccess;		}		case dataWine:		{			wineDef* wine=(wineDef*)ret;			if(mysql_num_fields(g_Rst)<4)				return dbFailFieldNumber;			wine->ID=atoi(temp_row[0]);			strcpy(wine->name,temp_row[1]?temp_row[1]:"NULL");			strcpy(wine->unitName,temp_row[2]?temp_row[2]:"NULL");			wine->price=atof(temp_row[3]);			return dbSuccess;					}		case dataBill:		{			J8 tbuf[64];			billDef* bill=(billDef*)ret;			if(mysql_num_fields(g_Rst)<11)				return dbFailFieldNumber;			bill->ID=atoi(temp_row[0]);                        strcpy(bill->roomName,temp_row[1]?temp_row[1]:"NULL");			bill->totalCost=atoi(temp_row[2]);			bill->totalAgio=atof(temp_row[3]);			bill->groundCost=atof(temp_row[4]);			bill->otherCost=atof(temp_row[5]);			bill->otherCost2=atof(temp_row[6]);			bill->changeRoomCost = atof(temp_row[7]);			strcpy(bill->beginTime,temp_row[8]);			strcpy(bill->endTime,temp_row[9]);			strcpy(bill->priceUnit, temp_row[10]);			return dbSuccess;		}		default:			return dbFailPara;	}	return dbSuccess;}dbErr dbCount(J32* count){	if(g_Rst)	{		*count=mysql_num_rows(g_Rst);		return dbSuccess;	}	else		return dbFailRstNotOpen;}dbErr dbCount2(J32* count){	if(g_RstSinger)	{		*count=mysql_num_rows(g_RstSinger);		return dbSuccess;	}	else		return dbFailRstNotOpen;}	dbErr dbMove(J32 pos){	J32 count;	if(!g_Rst)		return dbFailRstNotOpen;	dbCount(&count);	if(pos<count)	{		mysql_data_seek(g_Rst,pos);		return dbSuccess;	}	return dbFailPara;}dbErr dbMove2(J32 pos){	J32 count;	if(!g_RstSinger)		return dbFailRstNotOpen;	dbCount2(&count);	if(pos<count)	{		mysql_data_seek(g_RstSinger,pos);		return dbSuccess;	}	return dbFailPara;}dbErr dbFirst(void *ret,dataTypeDef dataType){	dbErr err;		err=dbMove(0);	if(err!=dbSuccess)		return err;	return dbGetRow(ret,dataType);}dbErr dbNext(void *ret,dataTypeDef dataType){	return dbGetRow(ret,dataType);}dbErr dbLast(void *ret,dataTypeDef dataType){	J32 temp_count;	dbErr err;		err=dbCount(&temp_count);	if(err!=dbSuccess)		return err;	dbMove(temp_count-1);		return dbGetRow(ret,dataType);	}#if VERJSdbErr dbBegin(J8 *dbName){	J8 *tmp_arg[]={"test","--skip-innodb"};	mysql_server_init(2,tmp_arg,(J8**)server_groups);	if(mysql_init(&ktv_MYSQL)==NULL)		return dbFailMysqlInit;		mysql_options(&ktv_MYSQL,MYSQL_READ_DEFAULT_GROUP,"ktv_server_CLIENT");        if(!mysql_real_connect(&ktv_MYSQL,NULL,NULL,NULL,dbName,0,NULL,0))        {		system("echo '连接数据库失败!' >> /tmp/login.error");		return dbFailMysqlConnect;	}	return dbSuccess;}#elsedbErr dbBegin(J8 *remoteIp,J8 *dbName,J8 *user,J8 *pwd){	J32 i=0;	if(mysql_init(&ktv_MYSQL)==NULL)		return dbFailMysqlInit;	mysql_options(&ktv_MYSQL,MYSQL_OPT_CONNECT_TIMEOUT,"15");	mysql_options(&ktv_MYSQL,MYSQL_OPT_COMPRESS,0);	for(i=0;i<8;i++)	{    	   if(mysql_real_connect(&ktv_MYSQL,remoteIp,user,pwd,dbName,0,NULL,0))		   break;	}		if(i==8)	{		system("echo '连接数据库失败!' >> /tmp/login.error");		printf("connect remote database failed!\n");		return dbFailMysqlConnect;	}	return dbSuccess;}#endifdbErr dbEnd(){	if(g_Rst)		mysql_free_result(g_Rst);	mysql_close(&ktv_MYSQL);#if VERJS	mysql_server_end();#endif	return dbSuccess;}dbErr dbQuery(J8 *sqlStr){	MYSQL_RES *tRst;	if(mysql_query(&ktv_MYSQL,sqlStr))		return dbFailExecute;#if VERJS	tRst=mysql_store_result(&ktv_MYSQL);#else	tRst=mysql_use_result(&ktv_MYSQL);#endif	if(mysql_fetch_row(tRst)==NULL)	{		mysql_free_result(tRst);		return dbEOF;	}	mysql_free_result(tRst);	mysql_query(&ktv_MYSQL,sqlStr);	if(g_Rst!=NULL)		mysql_free_result(g_Rst);	g_Rst=mysql_store_result(&ktv_MYSQL);	if(g_Rst!=NULL)		return dbSuccess;	else		return dbFailExecute;}dbErr dbQuery2(J8 *sqlStr){	MYSQL_RES *tRst;	if(mysql_query(&ktv_MYSQL,sqlStr))		return dbFailExecute;#if VERJS	tRst=mysql_store_result(&ktv_MYSQL);#else	tRst=mysql_use_result(&ktv_MYSQL);#endif	if(mysql_fetch_row(tRst)==NULL)	{		mysql_free_result(tRst);		return dbEOF;	}	mysql_free_result(tRst);		mysql_query(&ktv_MYSQL,sqlStr);	if(g_RstSinger!=NULL)		mysql_free_result(g_RstSinger);	g_RstSinger=mysql_store_result(&ktv_MYSQL);	return dbSuccess;}dbErr dbExecute(J8 *sqlStr){	if(mysql_real_query(&ktv_MYSQL,sqlStr,0))		return dbFailExecute;	return dbSuccess;}dbErr dbGetAll(J8 *value,J32 vsize){	J32 i,fcount;	MYSQL_ROW temp_row;		temp_row=mysql_fetch_row(g_Rst);	if(!temp_row)		return dbEOF;	fcount=mysql_num_fields(g_Rst);	for(i=0;i<fcount;i++)		strcpy(value+i*vsize,temp_row[i]?temp_row[i]:"NULL");	return dbSuccess;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -