Sqlite常用函数:

前端之家收集整理的这篇文章主要介绍了Sqlite常用函数:前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

文章来源于http://blog.csdn.net/ast_224/archive/2009/01/08/3734099.aspx

sqlite 常用函数

1 、打开数据库
说明:打开一个数据库文件名不一定要存在,如果此文件不存在, sqlite 自动创建。第一个参数指文件名,第二个参数则是定义的 sqlite3 ** 结构体指针(关键数据结构),这个结构底层细节如何,您不用管它。
int sqlite3_open(

const char *filename, /* Database filename (UTF-8) */

sqlite3 **ppDb /* OUT: sqlite db handle */

);
返回值:表示操所是否正确 sqlITE_OK 操作正常)

2 关闭数据库
说明:如果用 sqlite3_open 开启了一个数据库,结尾时不要忘了用这个函数关闭数据库

int sqlite3_close(sqlite3*); // 参数就是刚才的结构体,也就是数据库句柄


3
、执行 sql 语句:
明:这个函数功能是执行一条或者多条 sql 语句, sql 语句之间用 “;” 号隔开。建议在执行一条或者多条 sql 语句得时候,指定第三个参数回调函数,在 回调函数中可以获得执行 sql 得详细过程,如果所有 sql 执行完毕则应该返回 0 ,否则,则说明这次执行并没有完全成功。第五个参数:如果执行失败(没有返回 0 )则可以查看第五个阐述得值。来查看详细错误信息。
int sqlite3_exec(
sqlite3*,/*
已经打开的数据库句柄 */
const char *sql,/*
要执行的 sql 语句 */
sqlite_callback,/*
回调函数 */
void *,/*
传递给回调函数的参数 */
char **errmsg /*
保存错误信息 */
);
通常 sqlite3_callback 和它后面的 void* 这两个位置都可以填 NULL ,表示不需要回调。比如您做 insert 操作,做 delete 操作,就没有必要使用回调。而当作 select 时,就要使用回调,因为 sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。

4 exec 的回调

typedef int (*sqlite3_callback)(void*,int,char**,char**);

说明:你的回调函数必须定义为上面这个函数的类型。
例如:

int LoadMyInfo( void * para,int n_column,char ** column_value,char ** column_name )
{
//para
是你在 sqlite3_exec 里传入的 void * 参数

// 通过 para 参数,你可以传入一些特殊的指针(比如类指针、结构指针),然后在这里面强制转换成对应的类型(这里面是 void* 类型,必须强制转换成你的类型才可用)。然后操作这些数据

//n_column 是这一条记录有多少个字段 ( 即这条记录有多少列 )

// char ** column_value 是个关键值,查出来的数据都保存在这里,它实际上是个 1 维数组(不要以为是 2 维数组),每一个元素都是一个 char * 值,是一个字段内容(用字符串来表示,以 /0 结尾)

//char ** column_name column_value 是对应的,表示这个字段的字段名称


5
、取当前插入位置:
功能:返回你前一次插入得位置,从 1 开始, sqlite3* 为你打开数据库所得到得句柄。
long long int sqlite3_last_insert_rowid(sqlite3*);

6
、非回调 select 查询
功能:执行一次查询 sql 并且返回得到一个记录集。
int sqlite3_get_table(
sqlite3*,/*
要执行的 sql 语句 */
char ***resultp,/*
保存返回记录集的指针 */
int *nrow,/*
返回记录数(及查出多少行) */
int *ncolumn,/*
返回字段数(多少列) */
char **errmsg /*
返回错误信息 */
)

说明:第三个参数是查询结果,它是一维数组,内存布局为:第一行是字段名称,后面是紧接着是每个字段的值。
实例:

int main( int,char ** )
{
sqlite3 * db;
int result;
char * errmsg = NULL;

char **dbResult;

int nRow,nColumn;

int i,j;

int index;

result = sqlite3_open( “c://Dcg_database.db”,&db );
if( result != sqlITE_OK )
{
return -1;
}

// 数据库操作代码

// 假设前面已经创建了 MyTable_1

// 开始查询,传入的 dbResult 已经是 char ** ,这里又加了一个 & 取地址符,传递进去的就成了 char ***

result = sqlite3_get_table( db,“select * from MyTable_1”,&dbResult,&nRow,&nColumn,&errmsg );

if( sqlITE_OK == result )
{
//
查询成功
index = nColumn; //
前面说过 dbResult 前面第一行数据是字段名称,从 nColumn 索引开始才是真正的数据
printf( “
查到 %d 条记录 /n”,nRow );

for( i = 0; i < nRow ; i++ )
{
printf( “
%d 条记录 /n”,i+1 );
for( j = 0 ; j < nColumn; j++ )
{
printf( “
字段名 :%s ?> 字段值 :%s/n”,dbResult[j],dbResult [index] );
++index; // dbResult
的字段值是连续的,从第 0 索引到第 nColumn - 1 索引都是字段名称,从第 nColumn 索引开始,后面都是字段值,它把一个二维的表(传统的行列表示法)用一个扁平的形式来表示
}
printf( “-------/n” );

}
}

// 到这里,不论数据库查询是否成功,都释放 char** 查询结果,使用 sqlite 提供的功能来释放
sqlite3_free_table( dbResult );
//
关闭数据库
sqlite3_close( db );

return 0;
}


7
、释放查询结果:
功能:释放当前查询的记录集所占用的内存
void sqlite3_free_table(char **result);

实例:( sqlite 数据库使用回调函数的简单 C 语言实例)

  1. #include<stdio.h>
  2. #include<sqlite3.h>
  3. static int callback( void *NotUsed, int argc, char **argv, char **azColName)
  4. {
  5. int i;
  6. for (i=0;i<argc;i++)
  7. {
  8. printf( "%s=%s/n" ,azColName[i],argv[i]?argv[i]: "NULL" );
  9. }
  10. printf( "/n" );
  11. return 0;
  12. }
  13. int main( int argc, char **argv)
  14. {
  15. sqlite3*db;
  16. char *zErrMsg=0;
  17. int rc;
  18. if (argc!=3)
  19. {
  20. fprintf(stderr, "Usage:%sDATABASEsql-STATEMENT/n" ,argv[0]);
  21. return 1;
  22. }
  23. rc=sqlite3_open(argv[1],&db);
  24. if (rc)
  25. {
  26. fprintf(stderr, "Can'topendatabase:%s/n" ,sqlite3_errmsg(db));
  27. sqlite3_close(db);
  28. return 1;
  29. }
  30. rc=sqlite3_exec(db,argv[2],callback,&zErrMsg);
  31. if (rc!=sqlITE_OK)
  32. {
  33. fprintf(stderr, "sqlerror:%s/n" ,zErrMsg);
  34. sqlite3_close(db);
  35. return 1;
  36. }
  37. sqlite3_close(db);
  38. return 0;
  39. }

编译:

[root@localhost test]# gcc sql.c -o sql -l sqlite3

原文链接:https://www.f2er.com/sqlite/203058.html

猜你在找的Sqlite相关文章