📄 dbfun.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 + -