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 ...
随机推荐
- 防止HTML出现滚动条时页面的抖动
<html> <style> * { padding: 0; margin: 0; } body { font: 40px fantasy; } .container { wi ...
- github desktop项目版本控制
[git版本控制-笔记]by lijun 0.推荐学习网址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b ...
- Android(java)学习笔记18:单例模式
单例模式代码示例: 1. 单例模式之饿汉式: package cn.itcast_03; public class Student { // 构造私有 private Student() { } // ...
- Spring多个版本源码地址分享
源码地址为:http://repo.spring.io/simple/libs-release-local/org/springframework/spring/,以供研究源码的朋友. 我看了好几本关 ...
- 【luogu P3373 线段树2】 模板
题目链接:https://www.luogu.org/problemnew/show/P3373 lazy标记两个,先乘后加 #include <iostream> #include &l ...
- Android学习笔记_41_TabHost自定义标签和TraceView性能测试
一.tabhost第一种用法,通过在帧布局放入定义好的page页面来实现,这样导致在当前activity下代码量比较大. 1.页面布局: | | | | ...
- Python—面向对象 封装03
接着上面的一篇继续往下: 如何隐藏 在python中用双下划线开头的方式将属性隐藏起来(设置成私有的) class A: __x = 1 # _A__x = 1 def __init__(self, ...
- 122. Best Time to Buy and Sell Stock II ——LeetCode
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- linux ccenteros 部署 redis
step one : yum install redis -- 安装redis数据库 step two:安装完成之后开启redis 服务 service redis start syste ...
- oracle官网下载教程
1.百度搜索oracle 也可以直接点击进入 oracle官网 或直接进入 下载页面 2.选择中文,看的更容易些 3.拉到最下面,选择所有下载和试用 4.选择数据库下载 5.点击下载对 ...