SOCI是一个数据库操作的库,并不是ORM库,它仍旧需要用户编写sql语句来操作数据库,只是使用起来会更加方便,主要有以下几个特点
- 以stream方式输入sql语句
- 通过into和use语法传递和解析参数
- 支持连接池,线程安全
由此可见它只是一个轻量级的封装,因此也有更大的灵活性,后端支持oracle,mysql等,后续示例均基于mysql
安装
git项目地址https://github.com/SOCI/soci
推荐使用cmake编译
git clone https://github.com/SOCI/soci.git
cd soci
mkdir build
cd build
cmake .. -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/opt/third_party/soci
make
sudo make install
基本查询
假设有如下表单
CREATE TABLE `Person` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`first_name` varchar(64) NOT NULL DEFAULT '',
`second_name` varchar(64) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
初始化session
using namespace soci;
session sql("mysql", "dbname=test user=your_name password=123456");
第一个参数为使用的后端数据库类型,第二个参数为数据库连接参数,可以指定的参数包括host port dbname user passowrd
等,以空格分隔
insert
string first_name = "Steve";
string last_name = "Jobs";
sql << "insert into Person(first_name, last_name)"
" values(:first_name, :last_name)",
use(first_name), use(last_name);
long id;
sql.get_last_insert_id("Person", id)
通过流的方式传递sql语句,用use语法传递参数
其中Person(first_name, last_name)
为数据库table名和column名,values(:first_name, :last_name)
里的为参数的占位符,这里可以随便书写,get_last_insert_id
函数可以获取自增长字段的返回值
需要注意的是use
函数里的参数的生命周期,切记不能将函数返回值作为use
函数的参数
select
int id = 1;
string first_name;
string last_name;
sql << "select first_name, last_name from Person where id=:id ",
use(id), into(first_name), into