使用C/C++操作sqlite数据库进行GIS数据转换时,sqlite不能在sql中定义枚举量和常量。当程序设计中需要很多枚举量的时候,比如道路表中道路类型列就是枚举量:0表示高速,1表示国道,2表示省道,3表示县道等,又不能在sql中定义这些枚举量,我们该怎么解决呢?
在南浔等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、网站设计 网站设计制作按需求定制开发,公司网站建设,企业网站建设,成都品牌网站建设,全网整合营销推广,外贸营销网站建设,南浔网站建设费用合理。
通过搜索引擎知道sqlite可以让用户自己扩展sql函数,感觉可以使用sqlite扩展函数来解决这个问题。sqlite扩展sql函数的方法和步骤:首先按sqlite扩展函数的原型定义自己的函数,然后使用sqlite3_create_function注册到sqlite中,然后就可以在sql中使用自己定义的函数了,就跟使用预定义好的sqlite核心函数一样。
例如,我们可以把高速类型定义成一个扩展函数,这个函数返回0:
- static void fun_ROAD_TYPE_HIGHWAY( sqlite3_context * context, int argc, sqlite3_value ** value ) { sqlite3_result_int64( context, 0 ); };
然后把它注册到sqlite中,注册名为ROAD_TYPE_HIGHWAY:
- sqlite3_create_function( db, "ROAD_TYPE_HIGHWAY", 0, SQLITE_ANY, 0, fun_ROAD_TYPE_HIGHWAY, 0, 0 )
注册完后我们就可以在sql语句中通过注册名ROAD_TYPE_HIGHWAY来使用这个函数了,如:选出所有高速的sql可以写成select * from road_table where road_type = ROAD_TYPE_HIGHWAY(),这样是不是好多了。
由于GIS数据库中的枚举量居多,如果每个都要手工写个函数并注册,这肯定是一个超级体力活,所以用perl写了一个根据c/c++头文件生成sqlite扩展函数的小程序:http://files.cnblogs.com/adgnat/sqlitefungen.7z
程序使用方法:
1.确保安装了perl5和vc。
2.下载程序并解压。
3.打开cmd.exe,并进入程序(sqlitefungen)目录。
4.运行vcvars32.bat初始化VC编译环境。
5.执行自动生成脚本:perl sqlitefungen.perl mydb.h,mydb.h可以换成自己定义的头文件。
6.执行完后头文件目录下将生成一个同名的dll文件,你可以在sqlite3.exe中使用.load命令或sql中使用load_extension函数来加载该dll,加载后就可以使用dll中定义的扩展函数了。
关于SQLite扩展函数的知识就介绍到这里,希望看完之后您能有所收获,因为您的收获就是我***的快乐!
【编辑推荐】
标题名称:使用SQLite扩展函数来定义自己的函数
转载来源:http://www.shufengxianlan.com/qtweb/news21/162371.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联