• 大小: 13KB
    文件类型: .c
    金币: 2
    下载: 1 次
    发布日期: 2021-06-04
  • 语言: 数据库
  • 标签: Sqlite3  

资源简介

里面对于Sqlite3数据库2进制数据进行了详细的解析和对于大部分常用Sqlite3的接口函数做了一定的总结。对于2进制数据eg图片的操作有实例源代码提供。

资源截图

代码片段和文件信息


#if 0

Sumary By Leonard 

Time : 2017.8.25

针对于sqlite数据库需要对其2进制数据进行操作的理解
其中主要是利用了sqlite3_stmt这个辅助结构体来进行sql
语句的转化。
下面是对其blob数据的插和查询操作。查询操作呢,主要是
利用了pTemplate = sqlite3_column_blob( stat 1 );
  int length = sqlite3_column_bytes( stat 1 );
这两个接口操作。其中pTemplate是查询到的数据保存的一个
一维数组。
  result = sqlite3_reset(stat);这个接口函数是重新
将sqlite3_prepare的stat辅助工具再次解析,然后可以利用
sqlite3_bind_blob()函数再次进行转换后可以sqlite3_step
函数进行sql语句操作。

sqlite3_column_text(stat 1 ) 取text类型的数据。   1表示第1个字段 也就是第1列
sqlite3_column_blob(stat 2 ),取blob类型的数据   
sqlite3_column_int(stat 3 ) 取int类型的数据

sqlite3_errcode() 通常用来获取最近调用的API接口返回的错误代码.  
sqlite3_errmsg() 则用来得到这些错误代码所对应的文字说明. 这些
错误信息将以 UTF-8 的编码返回并且在下一次调用任何SQLite API函
数的时候被清除. sqlite3_errmsg16() 和 sqlite3_errmsg() 大体上
相同除了返回的错误信息将以 UTF-16 本机字节顺序编码.

如果要创建新数据库 sqlite3_open16() 将内部文本转换为UTF-16编码 
反之sqlite3_open() 将文本转换为UTF-8编码.

sqlite3_prepare() 处理的SQL语句应该是UTF-8编码的. 
而 sqlite3_prepare16() 则要求是UTF-16编码的. 输入的参数中只有第一个
SQL语句会被编译. 第四个参数则用来指向输入参数中下一个需要编译的SQL语
句存放的SQLite statement对象的指针 任何时候如果调用 sqlite3_finalize() 
将销毁一个准备好的SQL声明. 在数据库关闭之前,所有准备好的声明都必须被
释放销毁. sqlite3_reset() 函数用来重置一个SQL声明的状态,使得它可以被再次执行.

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 

评论

共有 条评论