利用OTL操纵MySQL数据库【mysql】

来源:互联网 发布:华腾软件怎么样 编辑:程序博客网 时间:2024/06/05 07:34

在一个项目中,通过时间戳增量将远程数据同步到本地,利用OTL(http://otl.sourceforge.net/)完成对MySQL数据库的操作。将其中部分工作抽象简化后总结如下。

  数据表包含3个字段:编号(自增的主键,PK AI),姓名,年龄。依据编号选出某一行数据,年龄增加其余属性不变写入新行,删除旧数据。  

  方法一:

  定义update函数:

View Code
1 void update(int id) 2 { 3 char name[30]; 4 int age; 5 6 // start transaction 7 otl_stream ob(1, 8 "start transaction;", 9 db 10 ); 11 12 // select old row 13 otl_stream o1(50, 14 "select name, age from test_tab where id=:id<int>;", 15 db 16 ); 17 o1 << id; 18 o1 >> name >> age; 19 cout << "name = " << name << ", age = " << age << endl; 20 age++; 21 22 // insert new row 23 otl_stream o2(1, 24 "insert into test_tab (name, age) values (:name<char[30]>, :age<int>);", 25 db 26 ); 27 o2 << name << age; 28 29 // delete old row 30 otl_stream o3(1, 31 "delete from test_tab where id=:id<int>;", 32 db 33 ); 34 o3 << id; 35 36 // commit 37 otl_stream oe(1, 38 "commit;", 39 db 40 ); 41 }

  参数绑定通过OTL中的otl_stream对象完成,与标准输入输出对象类似,otl_stream也重载了<<和>>。

  方法2:

  在数据库中定义存储过程updateAge:

1 DELIMITER $$ 2 3 CREATE PROCEDURE `updateAge` (IN _id INT) 4 BEGIN 5 start transaction; 6 select @name:=name, @age:=age from test_tab where id=_id; 7 insert into test_tab (name, age) values (@name, @age+1); 8 delete from test_tab where id=_id; 9 commit; 10 END

  调用存储过程:

1 otl_connect db; 2 int id = 17; 3 string sql_str("call updateAge(:id<int>)"); 4 otl_stream call_proc(1, sql_str.c_str(), db); 5 call_proc << id;

  修改结果:

原创粉丝点击