SOCI使用指南

原创
2022/02/26 16:33
阅读数 1.1K

SOCI源码编译指南:
1、找到3rdparty\soci\cmake\modules\FindSQLite3.cmake
手动添加sqlite3的path 和lib库 注意32/64 debug/release区分
或者自己去sqlite3 官方安装到本机
set(SQLITE3_LIBRARY "/Lib/x64/release/3rdparty/sqlite3.lib")

2、执行cmake 删除不需要的数据库

3、构建错误,打开增量编译。
https://blog.csdn.net/onez_cn/article/details/11537191

 

SOCI主要功能介绍:
开发文档:
https://github.com/SOCI/soci/tree/master/docs

ODBC:sqlite3 mysql
session sql(oracle, "service=orcl user=scott password=tiger");
session sql(postgresql, "dbname=mydb");
session sql(sqlite3, "dbname=mydb");

ORM:
c++结构体和数据库use或者into强绑定
http://soci.sourceforge.net/doc/release/4.0/types/#object-relational-mapping


thread safe sqlsession:
https://github.com/SOCI/soci/blob/master/docs/multithreading.md

批量事务插入:

        //创建事务
        transaction tr(sql);
        HVarData insertVarData;
        statement st = (sql.prepare <<
            "insert into table_name (UNIFIEDID,SERVERTIME,SOURCETIME,VALUE,QUALITY,TYPE) "
            "values(:UNIFIEDID,:SERVERTIME,:SOURCETIME,:VALUE,:QUALITY,:TYPE)",
            use(insertVarData));

        for (int i = 0; i < insertHVarDatas.size(); i++)
        {
            insertVarData = insertHVarDatas[i];
            st.execute(true);
        }

        //提交事务
        tr.commit();


批量查询:
        sql << "select * from table_name order by UNIFIEDID desc LIMIT 1", into(lastUnifiedId);
        //变量组id查询数据
        rowset<row> rs = (sql.prepare << "select * from UNIFY_NODEID where VARGRPID in(:varids)",use(varGrpIds));

update操作:
        sql << "update table_name set FILENAME=:fileName where FILENAME=:LastFileName"
            , use(index.fileName), use(LastFileName);


方案对比:
https://blog.csdn.net/wanghelou123/article/details/38365837?utm_source=itdadao&utm_medium=referral
soci相对来说易用、轻巧、文档多。
poco则相对来说较重。


SOCI架构设计:


client通过client api访问到session  session通过ODBC连接到后端 后端集成了各种主流数据库。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部