当前位置: 技术问答>linux和unix
数据库问题请求帮忙
来源: 互联网 发布时间:2016-10-13
本文导语: 我写了一个sqlite的数据库操作接口,如下: int exec_sql(char *db_name, char *sql, char *parm1, ...) { sqlite3 *db = NULL; int rc; rc = sqlite3_open(db_name, &db); if (SQLITE_OK != rc) { printf("%s(line:%d): %s", __FILE__, ...
我写了一个sqlite的数据库操作接口,如下:
这个函数只能执行象insert, delete等无数据返回的sql 语句,第一个参数为连接数据库的名称, 第二个参数为带“?”的sql 语句, 比如: insert into userinfo(?,?,?,?), 后面的变参依次为sql语句中“?”处所对应的值, 这样就可以把一些特殊字符插入数据库了。
不过我现在想用同样的预编译sqlite3_prepare方法写一个执行select的接口函数,
接口申明如下:char **exec_select_sql(char *db_name, int *nrow, int *ncolumn, char *sql, char *parm1, ... )
参数db_name为数据库名称, nrow为检索到的行数, ncolumn为检索到的列数, 后面的参数同exec_sql(),最终将检索到的结果集以char **的形式返回,请问这个函数的代码该怎么实现啊? 哪位高手能帮忙实现一下? 万分感激, 我刚看sqlite,对其中的很多库函数都不熟悉。
int exec_sql(char *db_name, char *sql, char *parm1, ...)
{
sqlite3 *db = NULL;
int rc;
rc = sqlite3_open(db_name, &db);
if (SQLITE_OK != rc)
{
printf("%s(line:%d): %s", __FILE__, __LINE__, "cann't open or create database");
return SQLITE_ERROR;
}
sqlite3_stmt *stmt = NULL;
rc = sqlite3_prepare(db, sql, -1, &stmt, NULL);
if(SQLITE_OK != rc)
{
printf("%s(line:%d): %s", __FILE__, __LINE__, sqlite3_errmsg(db));
return SQLITE_ERROR;
}
va_list arg_ptr;
char *ptr = parm1;
va_start(arg_ptr, parm1);
int index = 1;
while (ptr != NULL)
{
sqlite3_bind_text(stmt, index, ptr, -1, SQLITE_STATIC);
/*get the next param*/
ptr = (char *)va_arg(arg_ptr, char *);
index++;
}
va_end(arg_ptr);
rc = sqlite3_step(stmt);
if( rc != SQLITE_DONE)
{
printf("%s(line:%d): %s", __FILE__, __LINE__, sqlite3_errmsg(db));
return SQLITE_ERROR;
}
sqlite3_finalize(stmt);
sqlite3_close(db);
return SQLITE_OK;
}
这个函数只能执行象insert, delete等无数据返回的sql 语句,第一个参数为连接数据库的名称, 第二个参数为带“?”的sql 语句, 比如: insert into userinfo(?,?,?,?), 后面的变参依次为sql语句中“?”处所对应的值, 这样就可以把一些特殊字符插入数据库了。
不过我现在想用同样的预编译sqlite3_prepare方法写一个执行select的接口函数,
接口申明如下:char **exec_select_sql(char *db_name, int *nrow, int *ncolumn, char *sql, char *parm1, ... )
参数db_name为数据库名称, nrow为检索到的行数, ncolumn为检索到的列数, 后面的参数同exec_sql(),最终将检索到的结果集以char **的形式返回,请问这个函数的代码该怎么实现啊? 哪位高手能帮忙实现一下? 万分感激, 我刚看sqlite,对其中的很多库函数都不熟悉。
char **exec_select_sql(char *db_name, int *nrow, int *ncolumn, char *sql, char *parm1, ... )
{
//此处该怎么写啊?
}
|
char **pResult = (char**)calloc(4*nColumnCount,4);
for(int i=0; i
for(int i=0; i