PRO*C 函数事例 1 -- 数据库连接、事务处理

1、程序结构
        每一个Pro*C程序都包括两部分:(1)应用程序首部;(2)应用程序体
        应用程序首部定义了ORACLE数据库的有关变量, 为在C语言中操纵ORACLE数据库做好了准备。应用程序体基本上由Pro*C的SQL语句调用组成。
主要指查询SELECT、INSERT、UPDATE、DELETE等语句。
        应用程序的组成结构如图所示:
      
2、函数事例

EXEC SQL INCLUDE sqlca ;
#include "my_sys.h"
#include "errlog.h"

/* 连接数据库 */
int    OpenDb (char db_type)
{
    EXEC SQL BEGIN DECLARE SECTION;
        char    saUser[ 30 ];
        char    saPasswd[ 30 ];
        char    saTnsname[ 30 ];
    EXEC SQL END DECLARE SECTION;

    /***********
    * 联机数据库
    ************/
    strcpy (saUser, getenv ("ORACLEUSERID"));
    strcpy (saPasswd, getenv ("ORACLEUSERPWD"));
    strcpy (saTnsname, getenv ("ORACLETNSNAME"));

    EXEC SQL CONNECT :saUser IDENTIFIED BY :saPasswd USING :saTnsname;
    if (sqlca.sqlcode != 0)
    {
        printf ("db not open[%d]\n",  sqlca.sqlcode);
        return -1 ;
    }

    return 0;
}

/* 重新连接数据库 */
int    ReOpenDb( )
{
    int try_num = 0, ret;

    HtLog (ERROR , "db down\n");
    CloseDb ( );

    while (1)
    {
        printf ("connect to db %dth\n" , try_num);
        ret = OpenDb (‘l‘);
        if (ret == 0)
        {
            printf ("connect to db succ\n");
            return 0;
        }
        CloseDb ( );
        sleep (120);
        try_num ++;
        if (try_num > 15)
            break ;
    }

    printf ("db not open\n");

    return -1 ;
}

/* 关闭数据库 */
int CloseDb ( )
{
    EXEC SQL COMMIT WORK RELEASE;

    return 0 ;
}

/* 事务回滚 */
int DbsRollBack ( )
{
    EXEC SQL ROLLBACK WORK;

    return 0;
}

/* 事务提交 */
int DbsCommit ()
{
    EXEC SQL COMMIT;

    return 0;
}

说明:
       运行前需要在.basrc中配置ORACLEUSERID、ORACLEUSERPWD、ORACLETNSNAME 三个环境变量。其中printf部分可以改成T_log、E_log输出

时间: 2024-10-29 08:34:55

PRO*C 函数事例 1 -- 数据库连接、事务处理的相关文章

PRO*C 函数事例 2 -- 数据库操作

Pro*C Oracle 的嵌入式开发,数据库处理部分最好能提取到一个模块,按照对不同数据库表的操作分成不同的.pc文件(如 DbsInstStat.pc).将此模块编译成库(c文件编译时链接此库),.c文件处理库表时调用对应数据库模块(.pc)中的函数即可.      函数事例: DbsDef.h #define DBS_INIT 0 #define DBS_SELECT 1 #define DBS_LOCK 2 #define DBS_UPDATE 3 #define DBS_DELETE

PRO*C 函数事例 3 -- 游标使用

1.Oracle中的游标    Oracle使用两种游标: 显式游标和隐式游标. 不管语句返回多少条记录, Oracle为每条使用的SQL语句隐式地定义一个游标. Oracle为每个DELETE , UPDATE, INSERT 等SQL命令隐式地声明游标. 用户声明并使用显式游标处理SELECT语句返回的多条记录.    游标是ORACLE和PRO*C存放查询结果的工作区域.一个游标(已命名的)与一条SELECT语句相关联.操作游标有由4条命令:(1)DECLARE CURSOR:(2)OPE

使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程

http://bbs.pediy.com/showthread.php?p=1354999 标 题: [原创]使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程.作 者: shayi时 间: 2015-02-12,05:19:54链 接: http://bbs.pediy.com/showthread.php?t=197829 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程. (本文同步更

java数据库连接池实现原理

一.为什么在连接数据库时要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.  一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下. 数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并讲这些连接组成一个连接池(简单说:在一个"池"里放了好多半成品的数据库联接对象),由应用程序动态地对池中的连接进行申请.使用和释放.对于多于连接池中连接数的并发请求,应该在请求队列

数据库连接池分析

参考文献 1.一个效果非常不错的JAVA数据库连接池 2.使用 JAVA 中的动态代理实现数据库连接池 3.MySql与oracle的JDBC测试程序 分析 参考文献1是一个用java实现的数据库连接池,可以参考其代码实现,最好也看看java源代码是怎么实现数据库连接池的,两者进行比较. 参考文献2中提到了动态代理,之前写过的一片博客:设计模式之代理模式之二(Proxy)中也讲到了动态代理,这里可以参考一下. 下面首先给出参考1中的代码示例,具体见ConnectionPool.java,修改了部

实现数据库连接池

文件ConnectionParam.java package exam.Util.DButil; public class ConnectionParam { private String driver; // 数据库连接驱动 private String url; // 数据库连接URL private String user; // 数据库连接user private String password; // 数据库连接password private int minConnection; /

Java数据库连接池封装与用法

修改于抄袭版本,那货写的有点BUG,两个类,一个用法 ConnectionPool类: package com.vl.sql; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.Driver; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.

SQL语言的常用函数

本人心情:今天忽雨忽晴,一个周末又这么要过去了,总是感觉时间过得很快,不管是上班时间还是下班后的时间,总感觉时间不够用.最近博客也越来越少,有些知识用简单的文字去描述是很的抽象的,所以有时候也没什么可以写,以下是我这周抽空学的SQL语言常用函数.希望对大家有所帮助. SQL语言的常用函数 非常多.平时也许我们没经常用到,但是要用时,却不知如何使用.在这里,我举例几个常用的SQL常用函数: 字符函数 事例一:检索商品表,把商品价格后面加一个"元"字(商品价格比如为20) 分析:这题可以使

一个经试用效果非常不错的数据库连接池--JAVA

前言: 虽说现在许多企业级的应用服务器均自己带有数据库连接池功能,就连 Tomcat 也支持了这种功能.然而在许多时候,我们还是要使用数据库连接池,如:访问数据库的 Java 桌面应用程序等.这个数据库连接池是我根据< Inside Servlets >一书中的示例改写而成,经过试用,效果非常不错.特发布共享. 源代码 //ConnectionPool.java package com.abner.dbconnector; import java.sql.*; import java.util