今天在 sf.net 上发现了一个有趣的C++数据库访问库:SOCI,它对数据库的封装是我从来没有见过的。它独特在哪里呢?请看下面的代码:

怎么样,很有意思吧,看起来就好像SQL语句被内嵌在C++代码里一样。
学习了一下这个库的代码,它的结构非常巧妙。具体的实现大家可以去它的网站(http://soci.sourceforge.net)上下载源代码仔细研究,我在这里把它的结构图贴出来,从这图里也能初步地一窥端倪:

SOCI封装了对Oracle、Postgresql、MySQL、ODBC数据源、SQLite 3、Firebird的访问。
不过很遗憾,它对主流数据库特性的支持略有不足,这一点成为小小的遗憾:
| Oracle | PostgreSQL | MySQL | SQLite3 | Firebird | ODBC | |
|---|---|---|---|---|---|---|
| Binding by Name | YES | YES (>=8.0) | YES | YES | YES | YES |
| Dynamic Binding | YES | YES | YES | YES | YES | YES |
| Bulk Operations | YES | YES | YES | YES | YES | YES |
| Transactions | YES | YES | YES (with servers that support them, usually >= 4.0) | YES | YES | YES |
| BLOB Data Type | YES | YES | NO | NO | YES | NO |
| RowID Data Type | YES | YES | NO | NO | NO | NO |
| Nested Statements | YES | NO | NO | NO | NO | NO |
| Stored Procedures | YES | YES | NO (but stored functions, YES) | NO | YES | NO |
我正在尝试借鉴它的结构,在它的基础上加强对SQL Server 2000、SQLite特性的支持,做一个对我来说更实用的库。
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=6079854