/******************************************************************************
** AUTHOR: 何进
** TIME: 2011-3-20
** E-MAIL: hejin_some@163.com
**COMPANY:
******************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "gw_database.h"
static int gw_sqlite_open(const char *dbname,const char *user,const char *pwd);
static int gw_sqlite_execute(SQLHANDL *fd,const char *sql);
static int gw_sqlite_close(void);
static int gw_sqlite_resultcols(SQLHANDL fd,SQLSMALLINT *cols);
static int gw_sqlite_resultrows(SQLHANDL fd,int *rows);
static int gw_sqlite_bindcol(SQLHANDL fd,int col,int type,void *ptr,int length);
static int gw_sqlite_sqlfetch(SQLHANDL fd);
static int gw_sqlite_free(SQLHANDL fd);
static GW_DATEBASE_S gw_db =
{
.db_open = gw_sqlite_open,
.db_execute = gw_sqlite_execute,
.db_close = gw_sqlite_close,
.db_resultcols = gw_sqlite_resultcols,
.db_resultrows = gw_sqlite_resultrows,
.db_bindcol = gw_sqlite_bindcol,
.db_sqlfetch = gw_sqlite_sqlfetch,
.db_free = gw_sqlite_free
};
GW_DATEBASE_S * gw_db_op = &gw_db;
int gw_sqlite_open(const char *dbname,const char *user,const char *pwd)
{
int i;
DBHandle handle = NULL;
dbname = SQLITE_DB_NAME;
for(i = 0; i< MAX_CON; i++)
{
gw_db.SqliteHandle[i] = NULL;
gw_db.ConUsed[i] = 0;
gw_db.Flags[i] = 0;
gw_db.SelectNum[i] = 0;
gw_db.Result[i] = NULL;
gw_db.nrow[i] = 0;
gw_db.ncolumn[i] = 0;
}
// printf("db end\n");
memset(gw_db.SelectType,0,sizeof(int)*MAX_CON *MAX_CON);
memset(gw_db.SelectPtr,0,sizeof(void)*MAX_CON *MAX_CON);
gw_db.ConNum = 0;
handle = sqlite_open(dbname,0666,NULL);
if(handle == NULL)
{
printf("sqlite_open failed: address:%s->%d\n",__FILE__,__LINE__);
return GW_FALSE;
}
gw_db.SqliteHandle[0] = handle;
gw_db.ConNum = 1;
return GW_TRUE;
}
int gw_sqlite_execute(SQLHANDL *fd,const char *sql)
{
int ret = GW_FALSE,i;
char * ErrMsg = NULL;
char * select = NULL;
int flags = SQL_SELECT;
if((sql == NULL) && (strlen(sql) == 0))
{
return GW_FALSE;
}
for(i = 0; i< gw_db.ConNum; i++)
{
if(gw_db.ConUsed[i] == 0)
break;
}
if(i == MAX_CON)
{
printf("db error\n");
return GW_FALSE;
}
if(i == gw_db.ConNum)
{
DBHandle handle = NULL;
handle = sqlite_open(SQLITE_DB_NAME,0666,NULL);
if(handle == NULL)
{
printf("sqlite_open failed: address:%s->%d\n",__FILE__,__LINE__);
*fd = i;
return GW_FALSE;
}
gw_db.SqliteHandle[i] = handle;
gw_db.ConNum++;
}
select = strstr(sql,"SELECT");
if(select == NULL)
{
select = strstr(sql,"select");
if(select == NULL)
flags = SQL_NOSELECT;
}
if(flags == SQL_NOSELECT)
{
ret = sqlite_exec(gw_db.SqliteHandle[i],sql,NULL,0,&ErrMsg);
if(ret != SQLITE_OK)
{
printf("sqlite_exec failed: address:%s->%d\n",__FILE__,__LINE__);
sqlite_close(gw_db.SqliteHandle[i]);
return GW_FALSE;
}
printf("fd:%d,sql:%s\n",i,sql);
gw_db.Result[i] = NULL;
gw_db.nrow[i] = 0;
gw_db.ncolumn[i] = 0;
gw_db.Flags[i] = SQL_NOSELECT;
}
if(flags == SQL_SELECT)
{
ret = sqlite_get_table(gw_db.SqliteHandle[i],sql,&gw_db.Result[i],&gw_db.nrow[i],&gw_db.ncolumn[i],NULL);
if(ret != SQLITE_OK)
{
printf("sqlite_get_table failed %s->%d\n",__FILE__,__LINE__);
sqlite_close(gw_db.SqliteHandle[i]);
return GW_FALSE;
}
// printf("%d***%d\n",ccs_db.ncolumn[i],ccs_db.nrow[i]);
gw_db.Flags[i] = SQL_SELECT;
}
*fd = i;
gw_db.ConUsed[i] = 1;
gw_db.SelectNum[i] = 0;
memset(gw_db.SelectType[i],0,sizeof(int) * MAX_CON);
return GW_TRUE;
}
int gw_sqlite_close(void)
{
int i;
for(i = 0;i<gw_db.ConNum;i++)
{
if(gw_db.Flags[i] == SQL_SELECT)
{
sqlite_free_table(gw_db.Result[i]);
}
sqlite_close(gw_db.SqliteHandle[i]);
}
return GW_TRUE;
}
int gw_sqlite_bindcol(SQLHANDL fd,int col,int type,void *ptr,int length)
{
if(gw_db.ConUsed[fd] == 0)
{
return GW_FALSE;
}
if(gw_db.Flags[fd] != SQL_SELECT)
{
printf("bindcol error\n");
return GW_FALSE;
}
gw_db.SelectType[fd][col] = type;
gw_db.SelectPtr[fd][col] = ptr;
return GW_TRUE;
}
int gw_sqlite_sqlfetch(SQLHANDL fd)
{
int i;
char **Result;
if(gw_db.ConUsed[fd] == 0)
{
return GW_FALSE;
}
if(gw_db.Flags[fd] != SQL_SELECT)
{
printf("sqlfetch error\n");
return GW_FALSE;
}
gw_db.SelectNum[fd]++;
if(gw_db.SelectNum[fd] > gw_db.nrow[fd])
return GW_END;
Result = gw_db.Result[fd];
for(i = 1; i <= gw_db.ncolumn[fd];i++)
{
switch(gw_db.SelectType[fd][i])
{
case SQL_C_SLONG:
*(long*)gw_db.SelectPtr[fd][i]= atoi(Result[gw_db.SelectNum[fd] * gw_db.ncolumn[fd] + (i-1)]);
break;
case SQL_C_CHAR:
strcpy(gw_db.SelectPtr[fd][i],Result[gw_db.SelectNum[fd] * gw_db.ncolumn[fd] + (i-1)]);
break;
default:
printf("don't support type\n");
break;
}
}
return GW_TRUE;
}
int gw_sqlite_resultcols(SQLHANDL fd,SQLSMALLINT *cols)
{
if(gw_db.Flags[fd] != SQL_SELECT)
{
return GW_FALSE;
}
*cols = gw_db.ncolumn[fd];
return GW_TRUE;
}
int gw_sqlite_resultrows(SQLHANDL fd,int *rows)
{
if(gw_db.Flags[fd] != SQL_SELECT)
{
return GW_FALSE;
}
*rows = gw_db.nrow[fd];
return GW_TRUE;
}
int gw_sqlite_free(SQLHANDL fd)
{
if(gw_db.ConUsed[fd] == 0)
{
return GW_FALSE;
}
if(gw_db.ConUsed[fd] != 0)
{
gw_db.ConUsed[fd] = 0;
if(gw_db.Flags[fd] == SQL_SELECT)
{
gw_db.nrow[fd] = 0;
gw_db.ncolumn[fd] = 0;
memset(gw_db.SelectType[fd],0,MAX_CON*(sizeof(int)));
memset(gw_db.SelectNum,0,MAX_CON*sizeof(int));
memset(gw_db.SelectPtr[fd],0,MAX_CON*sizeof(void));
sqlite_free_table(gw_db.Result[fd]);
gw_db.Result[fd] = NULL;
}
}
return GW_TRUE;
}
#define CCSDATEBASE_TEST
#ifdef CCSDATEBASE_TEST
void main(void)
{
int ret;
int id;
SQLHANDL fd = 0;
char *sql = "insert into abc values(0,'abcd')";
char *sqltest1 = "insert into abc values(1,'abcd')";
char *sqltest2 = "insert into abc values(2,'abcd')";
char *sqltest3 = "insert into abc values(3,'abcd')";
char *sqltest4 = "insert into abc values(4,'abcd')";
char *sqltest5 = "insert into abc values(5,'abcd')";
char *sql1 = "delete from abc where id=1";
char *sql2 = "SELECT * from abc";
char *sqltestdel = "DELETE from test";
char *sqldel = "DELETE from abc";
printf("000000000\n");
ret = gw_db_op->db_open(NULL,NULL,NULL);
printf("11111111\n");
if(ret == GW_FALSE)
return;
printf("db_open\n");
fd = 0;
gw_db_op->db_execute(&fd,sqltestdel);
gw_db_op->db_free(fd);
fd = 0;
gw_db_op->db_execute(&fd,sqldel);
gw_db_op->db_free(fd);
fd = 0;
gw_db_op->db_execute(&fd,sql);
gw_db_op->db_free(fd);
fd = 0;
gw_db_op->db_execute(&fd,sqltest1);
gw_db_op->db_free(fd);
/*
fd = 0;
ccs_db_op->db_execute(&fd,sqltest2);
ccs_db_op->db_free(fd);
fd = 0;
ccs_db_op->db_execute
sqlite_api.rar_sqlite_sqlite数据库表
版权申诉
29 浏览量
2022-09-24
03:12:53
上传
评论
收藏 3KB RAR 举报
我虽横行却不霸道
- 粉丝: 74
- 资源: 1万+
最新资源
- 基于Matlab人脸肤色定理的教师人数统计+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab霍夫曼变换的表盘读数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab火灾烟雾检测源码带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的恶劣天气交通标志识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的霍夫曼变换的表盘示数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的车道线识别系统 +源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的教室人数统计系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的教室人数统计系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB 的霍夫曼变换答题卡识别源码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab+bp神经网络的神经网络汉字识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈