可能用到的头文件
#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在数据库里执行一遍看有没有错。