Pro*C简单示例代码

下面的代码就是实现了连接数据库,然后做一些操作

我的数据库表名为ym_test,仅有两个字段,int型的I,还有char *型的

dbop.pc文件

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "dbop.h"
  5. EXEC SQL BEGIN DECLARE SECTION;
  6.         sql_context     ctx;
  7. EXEC SQL END DECLARE SECTION;
  8. EXEC SQL INCLUDE sqlca;
  9. void sqlerror();
  10. int ConnDB(char *sDbConnStr)
  11. {
  12.         EXEC SQL BEGIN DECLARE SECTION;
  13.                 char sConnSql[256];
  14.         EXEC SQL END   DECLARE SECTION;
  15.         memset(sConnSql, 0, sizeof(sConnSql));
  16.         snprintf(sConnSql, sizeof(sConnSql), "%s", sDbConnStr);
  17.         EXEC SQL CONTEXT ALLOCATE :ctx;
  18.         EXEC SQL CONTEXT USE :ctx;
  19.         EXEC SQL CONNECT :sConnSql;
  20.         return sqlca.sqlcode;
  21. }
  22. int ReleaseDB()
  23. {
  24.         EXEC SQL COMMIT RELEASE;
  25.         return 0;
  26. }
  27. int ReadDB(int number)
  28. {
  29.         EXEC SQL BEGIN DECLARE SECTION;
  30.                 int num;
  31.                 char name[20];
  32.         EXEC SQL END   DECLARE SECTION;
  33.         num = number;
  34.         EXEC SQL SELECT STR
  35.                 INTO :name
  36.                 FROM ym_test
  37.                 where I = :num;
  38.         printf("/n%s /n", name);
  39.         return  0;
  40. }
  41. int WriteDB(int number, char *names)
  42. {
  43.         EXEC SQL BEGIN DECLARE SECTION;
  44.                 int num;
  45.                 char name[20];
  46.         EXEC SQL END   DECLARE SECTION;
  47.         num = number;
  48.         strcpy(name, names);
  49.         EXEC SQL INSERT
  50.                 INTO ym_test(
  51.                 I,
  52.                 STR
  53.                 )VALUES(
  54.                 :num,
  55.                 :name
  56.                 );
  57.         return  0;
  58. }
  59. int DeleteDB(int number)
  60. {
  61.         EXEC SQL BEGIN DECLARE SECTION;
  62.                 int num;
  63.         EXEC SQL END   DECLARE SECTION;
  64.         num = number;
  65.         EXEC SQL DELETE FROM ym_test
  66.                 where I = :num;
  67.         return 0;
  68. }
  69. void sqlerror()
  70. {
  71.         EXEC SQL WHENEVER SQLERROR CONTINUE;
  72.         printf("/nORACLE error detected:/n");
  73.         printf("%d/n", sqlca.sqlcode);
  74.         printf("/n%s /n", sqlca.sqlerrm.sqlerrmc);
  75.         /*回滚事务*/
  76.         EXEC SQL ROLLBACK RELEASE;
  77.         exit(1);
  78. }

main.cpp文件代码如下:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include "dbop.h"
  5. int main(int argc, char *argv[])
  6. {
  7.         ConnDB(user01/user001@testdb);
  8.         ReadDB(2);
  9.         ReadDB(1);
  10.         WriteDB(22, "Mengge");
  11.         ReadDB(22);
  12.         DeleteDB(2);
  13.         ReleaseDB();
  14.         return 0;
  15. }

 

编译脚本为:

  1. #!/bin/sh
  2. proc code=cpp ltype=none iname=dbop.pc oname=dbop.cpp
  3. g++ -g -Wall -c dbop.cpp
  4. g++ -g -Wall -c main.cpp
  5. g++ -g -Wall -L $ORACLE_HOME/lib -l clntsh main.o dbop.o -o main
  6. #删除中间文件
  7. rm -f dbop.o dbop.cpp main.o

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值