加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite 基本API接口说明

发布时间:2020-12-12 19:44:06 所属栏目:百科 来源:网络整理
导读:1 、打开数据库: 说明:打开一个数据库,文件名不一定要存在,如果此文件不存在, sqlite 会自动创建。第一个参数指文件名,第二个参数则是定义的 sqlite3 ** 结构体指针(关键数据结构),这个结构底层细节如何,您不用管它。 int sqlite3_open( const cha
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 * 值,是一个字段内容(用字符串来表示,以  结尾)   
//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 ?> 字段值 :%sn”,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);   

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读