极简ProC连接TimesTen程序

TimesTen也支持Pro*C接口,从编程的角度来看,除了连接字符串的指定外,其它和针对Oracle的开发几乎一样。

Pro*C程序连接TimesTen的框架

我们先来看一下Pro*C程序连接TimesTen的框架:

int main(int argc, char** argv)
{

// 连接数据库,可以用以下三种方法之一

// 法一
    EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :svc;
// 法二
    EXEC SQL CONNECT :connstr;
// 法三
    EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :easyconnstr;

// 执行DDL
    EXEC SQL CREATE TABLE a (a int);    

// 执行DML
    EXEC SQL INSERT INTO a values(12345);   

// 断开连接
    EXEC SQL COMMIT WORK RELEASE;
    exit(0);

}

Pro*C程序连接TimesTen的三种方法

  1. EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :svc;

    法1是最传统的方法,svc指定的service在tnsnames.ora中定义

  2. EXEC SQL CONNECT :connstr;

    法2是法1的一个变种,connstr的形式为”username/[email protected]”, service也是在tnsnames.ora中定义,例如

    “tthr/[email protected]_1122”;

  3. EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :easyconnstr;

    法3有些特别,不用TNS协议,而是直接使用easy connect字符串。

    easy connect的通用格式为[//]host[:port]/service_name:server[/instance]。

    TimesTen用的没这么复杂,简化的格式为hostname/DSN:driver, driver为timesten_client 或 timesten_direct,例如:

    “localhost/sampledb_1122:timesten_direct”;

我还是建议使用TNS,TNS相当于为应用加了一层虚拟化接口,变动接口时,可以不用改源程序,比较灵活。

预编译Pro*C程序

首先,预编译,是将.pc程序转化为.c程序

$ proc iname=helloworld.pc 

Pro*C/C++: Release 11.2.0.2.0 - Production on Thu Jul 14 07:31:58 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

System default option values taken from: /u01/app/oracle/product/11.2.0/dbhome_1/precomp/admin/pcscfg.cfg

$ ls -l helloworld.c
-rw-rw-r-- 1 oracle oracle 6678 Jul 14 07:31 helloworld.c

编译和链接

[oracle@timesten-hol proc]$ gcc -c helloworld.c -I $INSTANT_CLIENT/sdk/include
[oracle@timesten-hol proc]$ ll helloworld.o
-rw-rw-r-- 1 oracle oracle 5904 Jul 14 08:17 helloworld.o
[oracle@timesten-hol proc]$ gcc -o helloworld helloworld.o -L $INSTANT_CLIENT -lclntsh
[oracle@timesten-hol proc]$ ll helloworld
-rwxrwxr-x 1 oracle oracle 10446 Jul 14 08:18 helloworld

执行程序

这个程序的逻辑和之前的 极简Java连接TimesTen程序 是一样的。

$ ./helloworld

Command> select * from a;
< 12345 >

[oracle@timesten-hol proc]$ ./helloworld 

ORACLE error--

ORA-00955: TT2207: Table A already exists -- file "plittddl.c", lineno 737, procedure "plittCreate"

Command> drop table a;
Command> select * from a;
< 12345 >

$ ./helloworld
Command> select * from a;
< 12345 >

总结

Pro*C可以很简单的连接TimesTen, 和连接Oracle没有区别,不过我还是更建议不用 Pro*C,不伦不类的。

要性能,你可以用C,要简单和灵活性,你就用Java好了。

附录 helloworld.pc程序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlda.h>
#include <sqlcpr.h>

void sql_error(char *msg);

int main(int argc, char** argv)
{
    char  user[32] = "tthr";
    char  pass[32] = "timesten";
    char  svc[32] = "tnssampledb_1122";
    char connstr[128] = "tthr/[email protected]_1122";
    char easyconnstr[128] = "localhost/sampledb_1122:timesten_direct";

    EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");

//  EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :svc;
    EXEC SQL CONNECT :connstr;
//  EXEC SQL CONNECT :user IDENTIFIED BY :pass USING :easyconnstr;

    EXEC SQL CREATE TABLE a (a int);    

    EXEC SQL INSERT INTO a values(12345);   

    EXEC SQL COMMIT WORK RELEASE;
    exit(0);

}

void sql_error(char *msg)
{
    char err_msg[128];
    size_t buf_len, msg_len;

    EXEC SQL WHENEVER SQLERROR CONTINUE;

    printf("\n%s\n", msg);
    buf_len = sizeof (err_msg);
    sqlglm((unsigned char *) err_msg, &buf_len, &msg_len);
    printf("%.*s\n", (int) msg_len, err_msg);

    EXEC SQL ROLLBACK RELEASE;
    exit(EXIT_FAILURE);
}

时间: 2024-12-16 00:01:07

极简ProC连接TimesTen程序的相关文章

极简OCI连接TimesTen程序

针对Oracle数据库的开发,Java和OCI是最常用的两种编程语言,对于TimesTen也是一样. 相较于Pro*C,OCI编程稍显复杂.但OCI提供更细粒度的控制,提供更丰富的功能和更好的性能.因此,对于熟悉C语言的编程人员,为性能和可控制性,以及易于调试,都应该首选OCI而非Pro*C. 和Pro*C一样, OCI也支持用TNS和easy connect string(DSN)来连接TimesTen. 可以通过connect string和TWO_TASK来指定相应的接口. 由于大部分的概

极简.NET连接TimesTen程序

和OCI, PRO*C, JDBC连接Timesten一样,.NET连接TimesTen也非常简单.只不过需要安装的组件比较多些而已. 在运行示例程序之前,需要在Windows上先安装: 1. TimesTen Windows客户端,本例中,由于TimesTen数据库在Windows上,因此完整安装TimesTen 2. Oracle Database or Oracle Data Access Components (ODAC),其中包含了ODP.NET 12.1 3. Miicrosoft

用哪种命名方法连接TimesTen? TNS还是DSN

先来看一下下面这张概念图: Java程序支持DSN文件连接TimesTen(参见极简Java连接TimesTen程序),也支持绕过DSN直接连接目标数据库(参见开发者和DBA-不通过DSN连接TimesTen). 需要指出, JAVA不支持TNS方式,因为对于TimesTen,TNS的支持是在OCI中实现的,而JAVA并不基于OCI而是基于ODBC. 由于Pro*C基于OCI,因此C的API全都支持TNS和DSN两种方式. 详见极简OCI连接TimesTen程序 和 极简ProC连接TimesT

开发者和DBA-不通过DSN连接TimesTen

本文给出了一种在客户端不用定义DSN文件,直接连接服务器端DSN的方法. 当然,这并非一种主流的方法,只是为了开拓思路而已,比较有用的场景倒是可以用在ttisql实用程序,用来测试automatic client failover. 这种场景可以参见前文: TimesTen 数据库复制学习:16. 一个缓存组,复制,客户端自动切换的串烧实验 通过ttisql测试 以下为服务器端的DSN文件. [sampledb_1122] Driver=/home/oracle/TimesTen/tt1122/

Spring Boot (七): Mybatis极简配置

Spring Boot (七): Mybatis极简配置 1. 前言 ORM 框架的目的是简化编程中的数据库操作,经过这么多年的发展,基本上活到现在的就剩下两家了,一个是宣称可以不用写 SQL 的 Hibernate ,一个是对 SQL 非常友好的 Mybaties ,,两者各有特点,在企业级系统开发中可以根据需求灵活使用.发现一个有趣的现象:传统企业大都喜欢使用 Hibernate ,互联网行业通常使用 Mybatis . Hibernate 特点就是所有的 SQL 都用 Java 代码来生成

Flask入门小项目 - 搭建极简博客(7)

目录: Flask入门小项目 - 搭建极简博客(1)介绍与项目结构 Flask入门小项目 - 搭建极简博客(2)添加主页 Flask入门小项目 - 搭建极简博客(3)添加登录.登出功能 Flask入门小项目 - 搭建极简博客(4)添加注册功能 Flask入门小项目 - 搭建极简博客(5)添加写文章功能 Flask入门小项目 - 搭建极简博客(6)添加删除文章功能 Flask入门小项目 - 搭建极简博客(7)部署到服务器,实现外网访问 完整程序点这 零.效果 域名的话要等它备案完才能访问... 一

React Native的极简手册

安装入门可以参考:React Native官方文档(http://reactnative.cn/docs/0.31/tutorial.html#content). NodeJS知识储备:参考<NodeJS入门>(https://leanpub.com/nodebeginner-chinese).(尊重知识,请购买原版). 书籍:<React Native入门与实战> 代码示例:30天学习React Native教程(https://github.com/fangwei716/30-

反向传播神经网络极简入门

反向传播神经网络极简入门 我一直在找一份简明的神经网络入门,然而在中文圈里并没有找到.直到我看到了这份162行的Python实现,以及对应的油管视频之后,我才觉得这就是我需要的极简入门资料.这份极简入门笔记不需要突触的图片做装饰,也不需要赘述神经网络的发展历史:要推导有推导,要代码有代码,关键是,它们还对得上.对于欠缺的背景知识,利用斯坦福大学的神经网络wiki进行了补全. 单个神经元 神经网络是多个“神经元”(感知机)的带权级联,神经网络算法可以提供非线性的复杂模型,它有两个参数:权值矩阵{W

Resty 一款极简的restful轻量级的web框架

https://github.com/Dreampie/Resty Resty 一款极简的restful轻量级的web框架 开发文档 如果你还不是很了解restful,或者认为restful只是一种规范不具有实际意义,推荐一篇osc两年前的文章:RESTful API 设计最佳实践 和 Infoq的一篇极其理论的文章 理解本真的REST架构风格 虽然有点老,介绍的也很简单,大家权当了解,restful的更多好处,还请google 拥有jfinal/activejdbc一样的activerecor