Sqlite常用函数


1、打开数据库:

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

int sqlite3_open(                                                                

 const char *filename,                          

 sqlite3 **ppDb                                     

);

返回值:表示操所是否正确  (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,

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 intsqlite3_last_insert_rowid(sqlite3*);

6、非回调select查询:

功能:执行一次查询Sql 并且返回得到一个记录集。

int sqlite3_get_table(

sqlite3*,

const char *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);

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值