免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3680 | 回复: 5
打印 上一主题 下一主题

[C++] 找到一篇C++ OTL链接mysql的文章,不错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-29 16:39 |只看该作者 |倒序浏览
找到一篇C++ OTL链接mysql的文章,不错
http://www.xuanyuan-soft.cn/lab/examples/122-cpp-otl-mysql

论坛徽章:
0
2 [报告]
发表于 2013-10-30 13:30 |只看该作者
提示: 该帖被管理员或版主屏蔽

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
3 [报告]
发表于 2013-10-30 13:31 |只看该作者
轩辕高端 C++培训中心

==========================
可以删帖封号了似乎。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
4 [报告]
发表于 2013-11-01 10:10 |只看该作者
本帖最后由 yulihua49 于 2013-11-01 10:59 编辑
th234 发表于 2013-10-29 16:39
找到一篇C++ OTL链接mysql的文章,不错
http://www.xuanyuan-soft.cn/lab/examples/122-cpp-otl-mysql


还要写SQL语句?一般的包装器,insert是可以不写语句的。这点不如JAVA的Hibernate。
看看我这个包装器,C的,可以适用于MYSQL,ORACLE,DB2。称为DAU--Data Access Unit

  1. #include <sqli.h>
  2. #include <DAU.h>

  3. #define trans_begin(sql) ___SQL_Transaction__((sql),TRANBEGIN)
  4. #define trans_commit(sql) ___SQL_Transaction__((sql),TRANCOMMIT)
  5. #define trans_rollback(sql) ___SQL_Transaction__((sql),TRANROLLBACK)
  6. #define INTERVAL ((int)(now_usec() - now))

  7. #include "mytab.tpl"
  8. #include "mytab.stu"

  9. static int processDB(T_SQL_Connect *SQL_Connect)
  10. {
  11. DAU my_DAU;
  12. mytable_stu mytab;
  13. char stmt[4096],tmp[1024],*p;
  14. INT64 now;
  15. int ret,i;
  16. int today=rtoday();
  17. char *rec=NULL;
  18.         DAU_init(&my_DAU,SQL_Connect,NULL,&mytab,mytable_tpl);//使用mytable表
  19. //test DAU_select
  20.         p=mk_where("Name",stmt);
  21.         strcpy(mytab.Name,"中国 123");
  22. //      rjultostrfmt(mytab.beg_date,cvtdate("7.24",today),"yyyy\nmm\ndd");
  23.         ret=DAU_select(&my_DAU,stmt,0);
  24. printf("stmt=%s,ret=%d\n",stmt,ret);
  25.         if(ret>0) while(!DAU_next(&my_DAU)) {
  26.                 DAU_pack(&my_DAU,stmt);
  27.                 printf("select:%s\n",stmt);
  28.         }

  29. //test prepare
  30.         p=mk_where("ID",stmt);
  31.         now=now_usec();
  32.         for(i=0;i<46;i++) {
  33.                 mytab.ID=i+1;
  34.                 ret=DAU_prepare(&my_DAU,stmt);
  35.                 if(ret) {
  36.                         ShowLog(1,"%s:prepare fault ret=%d err=%d,%s",__FUNCTION__,ret,
  37.                                 SQL_Connect->Errno,
  38.                                 SQL_Connect->ErrMsg);
  39.                         DAU_free(&my_DAU);
  40.                         return ret;
  41.                 }

  42.                 while(!DAU_next(&my_DAU)) {
  43.                         DAU_pack(&my_DAU,tmp);
  44.                         printf("%s\n",tmp);
  45.                 }
  46.         }
  47.         ShowLog(5,"%s:prepare i=%d,INTERVAL=%d",__FUNCTION__,i,INTERVAL);

  48.         sprintf(stmt,"select max(ID) m from %s",my_DAU.srm.tabname);
  49.         ret=___SQL_Select__(SQL_Connect,stmt,&rec,0);
  50.         if(ret<=0) {
  51.                 DAU_free(&my_DAU);
  52.                 if(rec) free(rec);
  53.                 return 1;
  54.         }
  55.         i=atoi(rec);
  56.         free(rec);
  57. //test update
  58.         mytab.ID=i;
  59.         rjultostrfmt(mytab.beg_date,rtoday(),YEAR_TO_DAY);
  60.         trans_begin(SQL_Connect);
  61.         mk_where("ID",stmt);
  62.         ret=DAU_update(&my_DAU,stmt);
  63.         trans_commit(SQL_Connect);
  64.         printf("stmt=%s,ret=%d\n",stmt,ret);

  65. //test delete
  66.         mk_where("ID",stmt);
  67.         ret=DAU_delete(&my_DAU,stmt);
  68.         trans_commit(SQL_Connect);
  69.         printf("stmt=%s,ret=%d\n",stmt,ret);
  70. //test insert
  71.         rjultostrfmt(mytab.beg_date,rtoday(),YEAR_TO_DAY);
  72.         strcpy(mytab.Name,"中国               .");
  73.         *stmt=0;//may be INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1
  74.         trans_begin(SQL_Connect);
  75.         now=now_usec();
  76.         ret=DAU_insert(&my_DAU,stmt);
  77.         printf("stmt=%s,ret=%d,INTERVAL=%d\n",stmt,ret,INTERVAL);
  78.         trans_commit(SQL_Connect);

  79.         DAU_free(&my_DAU);
  80.         return ret;
  81. }

  82. int main(int argc,char *argv[])
  83. {
  84. int ret=0;
  85. T_SQL_Connect *SQL_Connect;

  86.         tzset();
  87.         if(argc>1) {
  88.                 ret=envcfg(argv[1]); //打开哪个数据库,在配置文件里。
  89.                 if(ret) printf("envcfg=%d\n",ret);
  90.         }

  91.         ret=init_DB_pool();
  92.         if(ret) {
  93.                 ShowLog(1,"%s:open DBpool fault,err=%d!",argv[0],ret);
  94.                 return 1;
  95.         }

  96.         ret=get_DB_connect(&SQL_Connect,0);
  97.         if(ret) {
  98.                 ShowLog(1,"get_DB_connect error %d",ret);
  99.                 free_DB_pool();
  100.                 return 2;
  101.         }
  102.         ret=mysql_thread_safe();
  103.         printf("mysql_thread_safe=%d\n",ret);
  104.         ret=processDB(SQL_Connect);
  105.         release_DB_connect(&SQL_Connect,0);
  106.         free_DB_pool();
  107.         return 0;
  108. }
复制代码

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
5 [报告]
发表于 2013-11-01 10:23 |只看该作者
本帖最后由 yulihua49 于 2013-11-01 10:26 编辑
yulihua49 发表于 2013-11-01 10:10
还要写SQL语句?一般的包装器,insert是可以不写语句的。这点不如JAVA的Hibernate。
看看我这个包装器 ...


它所操作的表结构,下列文件含两个表,例子里用的第一个:
#include "mytab.tpl"
cat mytab.tpl

T_PkgType mytable_tpl[]={
        {CH_INT,sizeof(int),"ID",0,-1},
        {CH_CHAR,61,"Name","gbk fixlength"},
        {CH_DATE,YEAR_TO_DAY_LEN,"beg_date",YEAR_TO_DAY},
        {-1,0,"mytable",0}
};

T_PkgType mytab_tpl[]={
        {CH_INT,sizeof(int),"ID",0,-1},
        {CH_CHAR,61,"Name","gbk fixlength"},
        {CH_CHAR,21,"node"},
        {CH_DATE,YEAR_TO_DAY_LEN,"beg_date",YEAR_TO_DAY},
        {CH_DATE,YEAR_TO_SEC_LEN,"on_time",YEAR_TO_SEC},
        {CH_INT64,sizeof(INT64),"Val"},
        {CH_DOUBLE,sizeof(double),"fval"},
        {CH_CHAR,9,"off_time","HH24:MI:SS"},
        {CH_BYTE,256,"map","tinyblob"},
        {CH_CHAR,5,"my_year"},
        {CH_INT,sizeof(int),"num"},
        {-1,0,"mytab",0}
};


#include "mytab.stu"

cat mytab.stu

extern T_PkgType mytable_tpl[];
typedef struct {
        int ID;
        char Name[61];
        char beg_date[YEAR_TO_DAY_LEN];
} mytable_stu;

extern T_PkgType mytab_tpl[];
typedef struct {
        int ID;
        char Name[61];
        char node[21];
        char beg_date[YEAR_TO_DAY_LEN];
        char on_time[YEAR_TO_SEC_LEN];
        unsigned INT64 Val;
        double fval;
        char off_time[9];
        char map[256];
        char my_year[5];
        int num;
} mytab_stu;

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
6 [报告]
发表于 2013-11-01 10:32 |只看该作者
本帖最后由 yulihua49 于 2013-11-01 10:49 编辑
yulihua49 发表于 2013-11-01 10:23
它所操作的表结构,下列文件含两个表,例子里用的第一个:
#include "mytab.tpl"
cat mytab.tpl

前些日子我还发帖,问OTL的事,今天回答了,表示感谢。
但是从技术上看,它的包装不深,还需要自己写SQL和绑定变量,而且是间接绑定,效率稍逊。

我这个呢,是把表映射成结构,类似于JAVA的ORM。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP