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连接到后端 后端集成了各种主流数据库。