Sqlite 常用函数推荐

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 是这一条记录有多少个字段 ( 即这条记录有多少列 ) www.jbxue.com
// 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*, /* 已经打开的数据库句柄 */ 
const char *sql, /* 要执行的 Sql 语句 */ 
char ***resultp, /* 保存返回记录集的指针 */ 
int *nrow, /* 返回记录数(及查出多少行) */ 
int *ncolumn, /* 返回字段数(多少列) */ 
char **errmsg /* 返回错误信息 */ 
) 

说明:(www.jbxue.com)第六个参数是询问结果,它是一维数组,内存布局为:第一行是字段名称,前面是随即是每个字段的值。 

实例:

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 语言实例)
复制代码 代码如下:

#include <stdio.h> 
#include <sqlite3.h> 
static int callback( void *NotUsed, int argc, char **argv, char **azColName) 
{ 
int i; 
for (i=0; i<argc; i++) 
{ 
printf( "%s = %s\n" , azColName[i], argv[i] ? argv[i] : "NULL" ); 
} 
printf( "\n" ); 
return 0; 
} 
int main( int argc, char **argv) 
{ 
sqlite3 *db; 
char *zErrMsg = 0; 
int rc; 
if ( argc!=3 ) 
{ 
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n" , argv[0]); 
return 1; 
} 
rc = sqlite3_open(argv[1], &db); 
if ( rc ) 
{ 
fprintf(stderr, "Can't open database: %s\n" , sqlite3_errmsg(db)); 
sqlite3_close(db); 
return 1; 
} 
rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg); 
if ( rc!=SQLITE_OK ) 
{ 
fprintf(stderr, "SQL error: %s\n" , zErrMsg); 
sqlite3_close(db); 
return 1; 
} 
sqlite3_close(db); 
return 0; 
}

编译: 

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

网站地图xml地图