SQLite3 C/C++ 开发接口简介(API函数) 二(zt)--转
?????? 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*);
以上是 sqlite3_bind 所包含的全部接口,它们是用来给SQL声明中的通配符赋值的. 没有绑定的通配符则被认为是空值. 绑定上的值不会被sqlite3_reset()函数重置. 但是在调用了sqlite3_reset()之后所有的通配符都可以被重新赋值.
在SQL声明准备好之后(其中绑定的步骤是可选的), 需要调用以下的方法来执行:
?????? int sqlite3_step(sqlite3_stmt*);
如果SQL返回了一个单行结果集,sqlite3_step() 函数将返回 SQLITE_ROW , 如果SQL语句执行成功或者正常将返回 SQLITE_DONE , 否则将返回错误代码. 如果不能打开数据库文件则会返回 SQLITE_BUSY . 如果函数的返回值是 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);
?????? int sqlite3_column_count(sqlite3_stmt*);
?????? const char *sqlite3_column_decltype(sqlite3_stmt *, int iCol);
?????? const void *sqlite3_column_decltype16(sqlite3_stmt *, int iCol);
?????? double sqlite3_column_double(sqlite3_stmt*, int iCol);
?????? int sqlite3_column_int(sqlite3_stmt*, int iCol);
?????? long long int sqlite3_column_int64(sqlite3_stmt*, int iCol);
?????? const char *sqlite3_column_name(sqlite3_stmt*, int iCol);
?????? const void *sqlite3_column_name16(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_column_count()函数返回结果集中包含的列数. sqlite3_column_count() 可以在执行了 sqlite3_prepare()之后的任何时刻调用. sqlite3_data_count()除了必需要在sqlite3_step()之后调用之外,其他跟sqlite3_column_count() 大同小异. 如果调用sqlite3_step() 返回值是 SQLITE_DONE 或者一个错误代码, 则此时调用sqlite3_data_count() 将返回 0 ,然而 sqlite3_column_count() 仍然会返回结果集中包含的列数.
返回的记录集通过使用其它的几个 sqlite3_column_***() 函数来提取, 所有的这些函数都把列的编号作为第二个参数. 列编号从左到右以零起始. 请注意它和之前那些从1起始的参数的不同.
sqlite3_column_type()函数返回第N列的值的数据类型. 具体的返回值如下:
?????? #define SQLITE_INTEGER? 1
?????? #define SQLITE_FLOAT??? 2
?????? #define SQLITE_TEXT???? 3
?????? #define SQLITE_BLOB???? 4
?????? #define SQLITE_NULL???? 5
sqlite3_column_decltype() 则用来返回该列在 CREATE TABLE 语句中声明的类型. 它可以用在当返回类型是空字符串的时候. sqlite3_column_name() 返回第N列的字段名. sqlite3_column_bytes() 用来返回 UTF-8 编码的BLOBs列的字节数或者TEXT字符串的字节数. sqlite3_column_bytes16() 对于BLOBs列返回同样的结果,但是对于TEXT字符串则按 UTF-16 的编码来计算字节数. sqlite3_column_blob() 返回 BLOB 数据. sqlite3_column_text() 返回 UTF-8 编码的 TEXT 数据. sqlite3_column_text16() 返回 UTF-16 编码的 TEXT 数据. sqlite3_column_int() 以本地主机的整数格式返回一个整数值. sqlite3_column_int64() 返回一个64位的整数. 最后, sqlite3_column_double() 返回浮点数.
不一定非要按照sqlite3_column_type()接口返回的数据类型来获取数据. 数据类型不同时软件将自动转换.