嵌入式SQL和事务

   可能用到的头文件

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <ctype.h>
#include <sqlda.h>
#include <sqlcpr.h>
#include <userlog.h>
#include <stdarg.h>
#include <limits.h>

 

其中#include <sqlda.h>。


1 、声明方法
     同其他数据库管理器一样,ORACLE 使用宿主变量传递数据库中的数据和状态信息到
应用程序,应用程序也通过宿主变量传递数据到 ORACLE 数据库。根据上面两种功能,宿
主变量分为输出宿主变量和输入宿主变量。在 SELECT INTO和 FETCH语句之后的宿主变
量称作“输出宿主变量” ,这是因为从数据库传递列数据到应用程序。除了 SELECT INTO
和 FETCH语句外的其他 SQL 语句中的宿主变量,称为“输入宿主变量” 。

 例如:int age;VARCHAR name[20];作为宿主变量。

         EXEC SQL INSERT INTO STU(age,name) VALUES(:age,:name);

2、常用的数据库操作

    查询

例如:

char * sql = "         ";//查询语句

EXEC SQL PREPARE Q_STU FROM :sql;

EXEC SQL DECLARE CURSOR C_STU FOR Q_STU;//声明游标,用来存放数据

EXEC SQL OPEN C_STU;//打开游标并查询数据

if(sqlca.sqlcode )

{

   //打开游标错误

}

EXEC SQL FETCH C_STU INTO :age,:name;//取数据放入宿主变量里

if(sqlca.sqlcode )

{

  //取数据失败

}

if(sqlca.sqlcode == NOTFIND )

{

    //没记录或到最后一条记录

    EXEC SQL CLOSE C_STU;

    return;

}

EXEC SQL CLOSE C_STU;

 

 

 

 

3、更新、插入、删除操作

//声明事务点

 

EXEC SQL SAVEPOINT SQLlib;

 

EXEC SQL PREPARE U_STU FROM :sql;

EXEC SQL EXECUTE U_STU;

//如果错误则回滚

if(sqlca.sqlcode)

{

   EXEC SQL ROLLBACK SQLLib;

}

这样就可以实现事务的回滚操作,很简单。

sqlca.sqlcode会是Oracle返回的错误代码;

 

在写后台代码的时候,要注意业务的连贯性,比如说在前面执行了一句update语句改变了表的状态,在后面的select语句又用到了状态这个条件查数据,这样做的结果sqlca.sqlcode = 1403,查询不到数据。

 

还有向表里插入数据的时候,要注意复合主键的值不能和表里的数据一样,避免冲突,所以最好是复合主键全都要有值,还有插入的数据类型和表的数据类型要一致,这是经常犯的错误。

 

给sql语句的where后面的条件赋值的时候,千万别出错,这个错误很隐晦,不容易发现。

 

最后注意循环的问题,第一遍循环成功,也许值和条件都改了,第二次循环就会出错,比如找不到数据等等;

所以写代码的时候要考虑循环,特别是如果第一次把表里的数据删除了、增加了或者是条件变了时要特别注意。

 

检查的时候最好把业务流程的所有sql在数据库里执行一遍看有没有错。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值