傻大方


首页 > 知识库 > >

嵌入式数据库简介|嵌入式数据库简介( 四 )


按关键词阅读: 嵌入式数据库


用来分配一个保存聚合过程状态的结构,在下面的调用中 , 将返回同样的内存块 。
该内存在聚合函数调用完成后自动释放 。
void (*xStep)(sqlite3_context*,int,sqlite3_value*);
用户自定义函数的格式 , 该函数用来统计用户需要的数据 , 第二个参数是自定函数的参数个数 , 第三个函数是自定义函数的值 。
void (*xFinal)(sqlite3_context*);
用户自定义函数的格式 , 用来设置返回值 自定 。

30、义排序函数接口 sqlite3_create_collation() sqlite3_create_collation16() 用来创建一个用来排序的函数(不同与简单函数和聚合函数的注册) void (*xCompare)(void *, int, const void *, int , const void *);
用户自定义函数的格式 , 第二个参数是自定函数的参数个数 , 第三个函数是自定义函数的值,SQLite内建聚合函数分析,聚合函数与简单函数有一些不同 。
简单函数只有一个回调函数 , 但是聚合函数有两个回调函数 。
struct CountCtx i64 n;
/64bit的整数 ;
typedef 。

31、 struct CountCtx CountCtx;
/用于记录count()的状态信息的结构 下面两个函数是count()的实现 , countStep()用于统计 , countFinialize()用于设置返回结果 。
static void countStep(sqlite3_context *context, int argc, sqlite3_value *argv) CountCtx *p;
p = sqlite3_aggregate_context(context, sizeof(*p);
if( (argc=0 | SQLITE_NULL!=sqlite3_value_type(arg 。

32、v0) /设置返回结果64bit,用户自定义聚合函数,自定义聚合函数的代码主要是两个回调函数的编写以及聚合函数的注册 , 能过前面的内建聚合函数的分析 , 我们总结出聚合函数定义的基步骤 。
基本步骤如下: 定义自己的用的聚合函数状态结构 利用sqlite3_aggregate_context( ctx, sizeof( struct custom_agg ) )分配状态结构空间 xStep()的调用会发生很多次 , 在查询结果的每一行上都运行xStep()进行数据处理 , 比如累加 , 计数 。
在XFinal()中 , 利用sqlite3_aggregate_context( ctx, 0 )得到状态结构 , 并且设置返 。

33、回值 。
利用sqlite3_create_func()注册聚合函数 在sql语句中调用聚合函数 在这里不再给出具体实现 , 可以参考前面简单函数的实现以及内建聚合函数的实现来编写,SQLite内部排序函数分析,内建排序函数 从前面接口部分的介绍我们可以看到注册一个排序函数是用sqlite3_create_collation()方法 , 该方法会调用createCollation()来注册排序函数 。
在main.c里面 , 我们可以看到在数据库打开完成之后 , 马上增加注册了下面几个比较函数: createCollation(db, BINARY, SQLITE_UTF8, 0, binCollFunc);
cr 。

34、eateCollation(db, BINARY, SQLITE_UTF16BE, 0, binCollFunc);
createCollation(db, BINARY, SQLITE_UTF16LE, 0, binCollFunc) ;
createCollation(db, NOCASE, SQLITE_UTF8, 0, nocaseCollatingFunc,用户自定义排序函数,用户自定义排序函数 如果在数据库中存在一列 , 该列的内容全部都是中文 , 我们想以中文的拼音对查询结果进行排序 , 那么上面预定义的几种排序方法是不可行的 , 因此 , 我们需要自己定义一个排序函数 。
int pinyin_cm 。

35、p( void *NotUsed, int nKey1, const void *pKey1,/比较的字符数 , 比较的指针 int nKey2, const void *pKey2) int n = nKey1 nKey1 ? nKey1 : nKey2;
return pinyin_strncmp(pKey1, pKey2, n + 1);
/中文比较函数 安装比较函数时要注意 , 因为我们实现的比较函数是针对UTF-16的 , 所以名字要用UTF-16编码 。
但是由于linux下默认的wchar_t是32位的 , 不能直接用”pinyin”的方式把ANSI字符串转换成UTF-16字符串 , 只能按下列方式 。
u 。

36、nsigned short zName = p, i, n, y, i, n, 0;
sqlite3_create_collation16(db, zName, SQLITE_UTF16, 16, pinyin_cmp);
select * from person order by name collate pinyin,SQLite自定义函数调用关系图,SQLite自定义函数的使用到此为至 , 现在让我们来看看系统到底是怎么样来注册以及调用自定义函数 。
下面的例子我们对sqlite3_prepare()和sqlite3_step()两个函数的流程做一个简单的分析,自定义函数调用关系图,SQLit 。

37、e数据库应用,在多级关联中动态创建使用索引 多级关联中数据库是动态进行创建 , 索引也是在数据库的创建过程中进行创建 , 而sqlite中索引的创建明显比其它的数据库慢 , 所以大量数据插入的速度相当慢 。
在多级关联使用DROP TABLE 因为sqlite数据库中delete操作是一相当慢的操作 , 因些在数据库使用的过程中 , 每次要清空数据库表时 , 直接将数据库删除 , 再重新创建新的数据库表 。
在多级关联中为SQL命令集定义函数 创建多个自定义函数 , 并结合SQL语句预编译的方式加快数据插入的速度 。


来源:(未知)

【学习资料】网址:/a/2021/0321/0021740501.html

标题:嵌入式数据库简介|嵌入式数据库简介( 四 )


上一篇:2021|2021秋新学期教师工作总结

下一篇:欢度|欢度新年作文500字