要用到一个C++封装的数据库访问库。要求以下几点:
1、能在sqlite、mysql、postgresql等等平滑迁移,主要是开发时一般测试用sqlite,正式发布时迁移到mysql或postgresql上面去。
2、逻辑不用太复杂,满足一般增删改查及视图就好。
3、不要太多magic技巧。
搜来搜去只找到两个合适的,SOCI 及litesql 。
网上关于这方面的使用介绍很少,只能细读他们自带的文档说明。下面说说他们的异同。
相同点:
1、都是对数据库操作的C++封装,力图减少冗繁的sql语句输入。
2、都采用了前端解析+后端适配的结构。
3、跨平台。*inx下的就不说了。Litesql直接提供了Windows下的lib库,只要包含头文件,引用lib库就直接用了。SOCI需要自己编译(CMake),编译的时候要指定支持项(boost、sqlite3、mysql等等),可能还要用到其他三方库,总的来说,比较麻烦,当然你都熟悉这些也没什么。
4、并发。这两个都不是线程安全的。不过soci提供了一个连接池部分解决问题。
不同点:
其实这两个库不论是使用方法,还是原理,差别都挺大的。
1、litesql是一个ORM框架。使用的时候,先按一定格式把数据库要求写在xml配置文件里,再用它提供的工具生成.cpp及.h文件,才能调用它的接口。因为它是个ORM框架,你得熟悉对象数据库的一套书写方法,最好还要了解一下它中间给你做了些什么转化,这样用起来才有点数。
soci就比较简单了,它只是用大量泛型算法为sql访问做了一层"语法糖",可以把它看做一个解析器,你还是要手写sql语句的。
2、litesql不支持access、sqlserver的,soci支持odbc,所以MS底下的一系列东东都是可以支持的。
3、litesql数据库建立比较麻烦,建立后接口很简洁,使用也方便。
soci只能说是个轻量封装,很多地方还需要你手工完成,不过他的基本功能已经很简便了。
4、最后说说ORM这个东西,litesql的ORM好是好,接口也很爽。就是又得增加个学习成本,你用个对象去操作数据库确实方便了,但不了解框架给我们干了什么,心里还是没底的。另外初学调试起来也麻烦。
结论:
litesql适合开发比较大的东东,并且你熟悉ORM这一套思想,另外不会采用MS XXServer的时候。
soci适合比较轻量的数据访问封装,有时候还得支持Access、MS XXServer的时候。
题外话:
如果只是开发一个非常轻量的东东,数据库控制在100W条以下的时候,完全可以直接用sqlite3,关于他的封装库,推荐一个比较好用的。easySQLite。