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[ ];
char saPasswd[ ];
char saTnsname[ ];
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 != )
{
printf ("db not open[%d]\n", sqlca.sqlcode);
return - ;
} return ;
} /* 重新连接数据库 */
int ReOpenDb( )
{
int try_num = , ret; HtLog (ERROR , "db down\n");
CloseDb ( ); while ()
{
printf ("connect to db %dth\n" , try_num);
ret = OpenDb ('l');
if (ret == )
{
printf ("connect to db succ\n");
return ;
}
CloseDb ( );
sleep ();
try_num ++;
if (try_num > )
break ;
} printf ("db not open\n"); return - ;
} /* 关闭数据库 */
int CloseDb ( )
{
EXEC SQL COMMIT WORK RELEASE; return ;
} /* 事务回滚 */
int DbsRollBack ( )
{
EXEC SQL ROLLBACK WORK; return ;
} /* 事务提交 */
int DbsCommit ()
{
EXEC SQL COMMIT; return ;
}
说明:
运行前需要在.basrc中配置ORACLEUSERID、ORACLEUSERPWD、ORACLETNSNAME 三个环境变量。其中printf部分可以改成T_log、E_log输出
PRO*C 函数事例 1 -- 数据库连接、事务处理的更多相关文章
- PRO*C 函数事例 3 -- 游标使用
1.Oracle中的游标 Oracle使用两种游标: 显式游标和隐式游标. 不管语句返回多少条记录, Oracle为每条使用的SQL语句隐式地定义一个游标. Oracle为每个DELETE , ...
- PRO*C 函数事例 2 -- 数据库操作
Pro*C Oracle 的嵌入式开发,数据库处理部分最好能提取到一个模块,按照对不同数据库表的操作分成不同的.pc文件(如 DbsInstStat.pc).将此模块编译成库(c文件编译时链接此库), ...
- C++转C#函数事例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...
- Java数据库连接池封装与用法
Java数据库连接池封装与用法 修改于抄袭版本,那货写的有点BUG,两个类,一个用法 ConnectionPool类: package com.vl.sql; import java.sql.Conn ...
- java实现数据库连接池
package com.kyo.connection; import java.sql.Connection; import java.sql.DatabaseMetaData; import jav ...
- js 函数闭包内部返回函数体调用方法难点解答
今天在网上,看到一篇关于js函数难点的文章,js函数的一些难点.在那上面提了一下,关于js函数返回另一个函数的问题,并附上了一道面试题: var add = function(x){ var sum ...
- 一个经试用效果非常不错的数据库连接池--JAVA
前言: 虽说现在许多企业级的应用服务器均自己带有数据库连接池功能,就连 Tomcat 也支持了这种功能.然而在许多时候,我们还是要使用数据库连接池,如:访问数据库的 Java 桌面应用程序等.这个数据 ...
- Java数据库连接池实现原理
一般来说,Java应用程序访问数据库的过程是: 装载数据库驱动程序: 通过jdbc建立数据库连接: 访问数据库,执行sql语句: 断开数据库连接. public class DBConnection ...
- Java写的数据库连接池
原文地址: http://lgscofield.iteye.com/blog/1820521 import java.sql.*; import java.util.Enumeration; impo ...
随机推荐
- 模线性方程&&中国剩余定理及拓展
一.求解模线性方程 由ax=b(mod n) 可知ax = ny + b 就相当于ax + ny = b 由扩展欧几里得算法可知有解条件为gcd(a, n)整除d 可以直接套用扩展欧几里得算法 最终由 ...
- Android(java)学习笔记33:注册广播接收者
1. 下面我们先看一部分代码,由代码进行进一步的深入: registerReceiver( new BroadcastReceiver() {//onReceive中代码的执行时间不要超过5s,and ...
- 20165322 实验四 《Android程序设计》
实验四 <Android程序设计> 任务一 实验内容 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECANDROID,安装 Androi ...
- BZOJ2836:[SHOI2012]魔法树(树链剖分)
Description Input Output Sample Input 4 0 1 1 2 2 3 4 Add 1 3 1 Query 0 Query 1 Query 2 Sample Outpu ...
- 生理周期,POJ(1006)
题目链接:http://poj.org/problem?id=1006 解题报告: 1.枚举天数的时候可以根据前面的结果直接跳过一些错误的答案. ///三个周期是23,28,33, #include ...
- echarts图表与可视窗口的自适应
由于要适应屏幕尺寸,发现了这个问题.网上搜到了两个办法,如下: 方法一: window.onresize = mychart.resize; 方法二: window.addEventListener( ...
- Hibernate注解开发示例
-------------------------------------------------------------------customer------------------------- ...
- L1 loss L2 loss
https://www.letslearnai.com/2018/03/10/what-are-l1-and-l2-loss-functions.html http://rishy.github.io ...
- c语言描述的链队列的基本操作
#include<stdio.h> #include<stdlib.h> #define ok 0 #define error 1 //链队列特点在于不仅有链的头指针和尾指针, ...
- viewpager中 pagerAdapter使用详解
必须覆盖以下方法instantiateItem(ViewGroup, int) 这个方法,return一个对象,这个对象表明了PagerAdapter适配器选择哪个对象*放在当前的ViewPager中 ...