在SQLite数据库中,常用的函数主要分为数据库创建关闭类、数据操纵语句类和数据查询填充语句类等相关的函数类型。在本小节中简单介绍这些函数,至于这些函数如何,将在后面的小节中介绍。
这些常用函数,在被执行后,经常根据不同的情况来返回不同的编码值,这样使用者根据这返回的编码值,提供的信息,来判断情况。表12-3列出了这些函数返回的常用编码。
表12-3 常用编码参考表12-3
数据库打开关闭类,这个类型包含的函数主要完成数据的打开和关闭功能,这样的函数有以下几个:
(1) int sqlite3_open(const char*, sqlite3**)
该函数,主要完成数据库的创建和打开。第一参数是指数据库存放的路径,第二个参数是指数据库实例变量。如果所指路径位置不存在数据库,则它会创建一个新的数据库,否则它将打开该路径位置的数据库。默认编码utf-8。函数返回值参考常用编码参考表12-3。
(2)int sqlite3_open16(const void*, sqlite3**)
该函数的功能同上面的函数一样,也是用于创建或者打开数据库, 参数参考上面的介绍。两个函数的不同在于,这个函数采用的是utf-16编码。函数返回值参考常用编码参考表12-3。
(3)int sqlite3_close(sqlite3*)
该函数,主要完成对数据库的关闭。参数为数据库实例变量。函数返回值参考常用编码参考表12-1。
数据操纵语句类,这个类型主要完成对数据库数据的插入(insert)、修改(update)和删除(delete)处理。数据操纵语句一般分预处理和执行处理两个过程那,也就是指执行之前,先做预处理。
在SQLite3中,用做与预处理的函数主要包括以下几个函数, 其中sqlite3_stmt为数据结构类型。
int sqlite3_prepare(sqlite3*, const char*, int, sqlite3_stmt**, const char**) int sqlite3_prepare16(sqlite3*, const void*, int, sqlite3_stmt**, const void**) int sqlite3_finalize(sqlite3_stmt*) int sqlite3_reset(sqlite3_stmt*)
在预处理后,,应该使用下面这个函数来执行:
int sqlite3_step(sqlite3_stmt*);
在SQLite3中,还有一种,类似参数化语句的执行方式,需要绑定参数,下面列出了这些常用的绑定函数:
int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)) int sqlite3_bind_double(sqlite3_stmt*, int, double) int sqlite3_bind_int(sqlite3_stmt*, int, int) int sqlite3_bind_int64(sqlite3_stmt*, int, long long int) int sqlite3_bind_null(sqlite3_stmt*, int) int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*)) int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int n, void(*)(void*)) int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*)
注意:上面的这些绑定函数,第二个参数是sql参数的索引值,以1开始。
数据查询填充语句类,这个类型函数主要完成数据的查询和数据的填充处理。它的处理过程跟上述的数据操纵语句类似。唯一的不同需要列值绑定。当sqlite3_step返回SQLITE_ROW,需要以下列函数来接收数据。
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol) int sqlite3_column_bytes(sqlite3_stmt*, int iCol) int sqlite3_column_bytes16(sqlite3_stmt*, int iCol) double sqlite3_column_double(sqlite3_stmt*, int iCol) int sqlite3_column_int(sqlite3_stmt*, int iCol) sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol) const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol) const void *sqlite3_column_text16(sqlite3_stmt*, int iCol) int sqlite3_column_type(sqlite3_stmt*, int iCol) sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol)
在上述参数中,注意,iCol参数起始值是0。
判断数据列的类型,就需要用到了函数sqlite3_column_type,根据该函数的返回编码就可以判断出列属于哪个数据类型。sqlite3_column_type函数的具体展现形式如下:
int sqlite3_column_type(sqlite3_stmt*, int iCol);
表12-4列出了这个函数返回的编码以及说明。
在SQLite3的应用中,sqlite3_exec函数也经常用到,它主要执行SQL 语句。特别是数据操纵,如果不涉及到检索数据,就可以应用它。
int sqlite3_exec(sqlite3* ppDb, const char *sql, int (*callback)(void*,int,char**,char**),
void *, char **errmsg );
在这个函数中,第1个参数不再说了,就是是前面open函数得到的指针。第2个参数constchar*sql是一条sql 语句,以\0结尾。第3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用提供的这个函数。第4个参数void*是所提供的指针,可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数。第5个参数char** errmsg 是错误信息。注意是指针的指针。sqlite3里面有很多固定的错误信息。
在实际的应用中,通常,sqlite3_callback 和它后面的void*这两个位置都可以填NULL。填NULL表示不需要回调。比如做insert 操作,做delete操作,就没有必要使用回调。而当做select 时,就要使用回调,因为sqlite3 把数据查出来,得通过回调告诉查出了什么数据。