免费注册 查看新帖 |

Chinaunix

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

oracle OCI编程问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-15 15:22 |只看该作者 |倒序浏览
哪位兄弟有自己封装好的OCI啊,就是把oracle提供的OCI接口封装成C++,我现在要建立个基于OCI的,以前没做过,只用PROC++的,谁能提供给我啊,不胜感激。谢谢

论坛徽章:
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
2 [报告]
发表于 2011-07-15 15:23 |只看该作者
本帖最后由 yulihua49 于 2011-07-15 15:55 编辑
哪位兄弟有自己封装好的OCI啊,就是把oracle提供的OCI接口封装成C++,我现在要建立个基于OCI的,以前没做过 ...
chinaorcl 发表于 2011-07-15 15:22



    OCCI,OCILIB
我还封装C的,没C++的。
C的,C++可以用啊。
SDBC QQ群:100807652,群共享区可以下载源码和文档。
给你个例子,封成这样行吗?
  1. #include "kpsrv.h"
  2. //数据
  3. static char seatdata[]="2007-05-27|BEP|H6B|H6|2007-05-28 00:10|5|21|12|6|0|0|\"G04\"\\G||1|WEB_JAVA|yulihua|2008-09-02 10:50:16|AAAM3iAAFAAAB81AAO|";

  4. int main(int argc,char *argv[])
  5. {
  6. SEAT_stu seat;
  7. char stmt[4096],tmp[4096];
  8. T_SQL_Connect Sql;
  9. int ret;
  10. DAU seat_DAU;
  11. JSON_OBJECT json;
  12.         if(argc>1) {
  13.                 ret=envcfg(argv[1]);//配置文件,打开数据库的参数等
  14.                 if(ret) fprintf(stderr,"init %s err=%d\n",argv[1],ret);
  15.         }

  16.         ret=db_open(&Sql);
  17.         if(ret!=0) {
  18.                 printf("Open database err=%d,%s\n",Sql.Errno,Sql.ErrMsg);
  19.                 exit(1);
  20.         }
  21. //Data Access Unit
  22.         DAU_init(&seat_DAU,&Sql,0,&seat,SEAT_tpl);//表名,在SEAT_tpl(数据模板)里,就是SEAT,数据模板(表结构)可以自动生成。
  23.         printf("\nseatdata=%s\n",seatdata);
  24.         DAU_dispack(&seat_DAU,seatdata);//seatdata(字符串),装入seat_DAU
  25.         seat.flag=2;
  26. //测试JSON
  27.         json=json_object_new_object();
  28.         DAU_toJSON(&seat_DAU,json,0);
  29.         printf("json_string=%s\n",json_object_to_json_string(json));
  30.         json_object_put(json);
  31. //测试insert
  32.         ret=DAU_insert(&seat_DAU,stmt);
  33.         printf("DAU_insert %d,stmt=%s\n",ret,stmt);
  34.         if(ret) printf("err=%d,%s\n",Sql.Errno,Sql.ErrMsg);
  35.         ret=DAU_print_bind(&seat_DAU,tmp);
  36.         printf("print_bind=%02X,bind=%s\n",ret,tmp);//打印绑定变量值

  37.         ___SQL_Transaction__(&Sql,TRANCOMMIT);
  38.         ___SQL_CloseDatabase__(&Sql);
  39.         return 0;
  40. }
复制代码
看我做的数据库包装器
http://www.itpub.net/viewthread.php?tid=1088197
太长了,看后边十几页,有结果。

论坛徽章:
0
3 [报告]
发表于 2011-07-15 16:06 |只看该作者
谢谢楼上的热心,我也刚接触这个,只是希望能直接封装成类的,虽然这个C++可以用,但这样我这边的代码看起来就比较乱,最好都统一是C++类。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
4 [报告]
发表于 2011-07-15 17:13 |只看该作者
ocicpplib ,支持的最高Oracle版本是8.1.7 采用C++
http://sourceforge.net/projects/ocicpplib/

论坛徽章:
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 [报告]
发表于 2011-07-15 17:44 |只看该作者
本帖最后由 yulihua49 于 2011-07-15 18:02 编辑
谢谢楼上的热心,我也刚接触这个,只是希望能直接封装成类的,虽然这个C++可以用,但这样我这边的代码看起来 ...
chinaorcl 发表于 2011-07-15 16:06



   你可以继续封装成C++,我最近也在考虑这个问题,以这个基础,不难的。

class DAU_OBJECT {
DAU *dau;
char *rec=NULL;

      public DAU_OBJECT(TSQL_Connect *SQL,char *tabname,T_PkgType *template)
      {
//init rec
                    rec=malloc(calc_size(template));
                    DAU_init(&dau,SQL,tabname,rec,template);
......
       }

      public int insert(char *buff)
      {
         int ret;
               ret=DAU_insert(&dau,buff);
               return ret;
        }

......................

         ~DAU_OBJECT()
         {
                   DAU_free(&dau);
                   if(rec) free(rec);
          }

}


使用:

DAU_OBJECT seat=new DAU_OBJECT(SQL_CONNECT,NULL,SEAT_tpl);

                          seat.dispack(seatdata);
                          int ret=saat.insert(buff);
...........................
                           seat.~DAU_OBJECT();

论坛徽章:
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 [报告]
发表于 2011-07-15 17:46 |只看该作者
ocicpplib ,支持的最高Oracle版本是8.1.7 采用C++
ecjtubaowp 发表于 2011-07-15 17:13



    现在都11G了啊!我们的封装一直是与时俱进的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP