C语言嵌入informix基础入门示例讲解

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <sqlca.h>

$struct _db_person
{
    char   name[30+1];
    char   card[12+1];
    int    age;
};

char *trim(char *str)
{
    char *p, *buffer;
    int  len;

if( NULL!=str )
    {
        len = strlen(str);
        if( len > 0 )
        {
            buffer=(char *)malloc(sizeof(char)*(len+1));
            if( NULL != buffer )
            {
                memmove(buffer, str, len);
                buffer[len]=0;

p = buffer + len - 1;
                while( (p != buffer) && ((*p > 0x00) && (*p <= ' ')) )
                    *(p--) = 0;
                p = buffer;
                while( (*p > 0x00) && (*p <= ' ') )
                    p++;
                strcpy(str, p);
                free(buffer);
            }
        }
    }
    return str;

}

int GetData(struct _db_person *pps)
{
    char strage[20];

memset(pps, 0, sizeof(struct _db_person));
    printf("enter name<press enter only to exit>: ");
    fgets(pps->name,sizeof(pps->name),stdin);
    trim(pps->name);
    if( strlen(pps->name) == 0 )
        return -1;
    printf("enter card no<press enter only to exit>: ");
    fgets(pps->card,sizeof(pps->card),stdin);
    trim(pps->card);
    if( strlen(pps->card) == 0 )
        return -2;
    printf("enter age<press enter only to exit>: ");
    fgets(strage,sizeof(strage),stdin);
    trim(strage);
    if( strlen(strage) == 0 )
        return -3;
    pps->age = atoi(strage);

return 0;
}

int main(void)
{
    $struct _db_person dbps;

$database exec01;
    if( SQLCODE != 0 )
    {
        printf("open demo1 failure,SQLCODE=%d\n",SQLCODE);
        return -1;
    }
    while( 1 )
    {
        if( GetData(&dbps)<0 )
            break;
        $insert into person(name, card, age) values($dbps.name, $dbps.card, $dbps.age);
        printf("insert data result: SQLCODE=%d\n",SQLCODE);
        $declare vcursor cursor for select name, card, age into $dbps.name, $dbps.card, $dbps.age from person;
        printf("declare vcursor result: SQLCODE=%d\n",SQLCODE);
        $open vcursor;
        printf("open vcursor result: SQLCODE=%d\n",SQLCODE);
        if( 0==SQLCODE )
        {
            while( 1 )
            {
                $fetch vcursor;
                if( 0==SQLCODE )
                {
                    printf("name=[%s],card=[%s],age=[%d]\n",dbps.name,dbps.card,dbps.age);
                }
                else
                {
                    if( SQLCODE==100 )
                        printf("fetch end!\n");
                    else
                        printf("fetch failure!SQLCODE=%d\n",SQLCODE);
                    break;
                }
            }
        }
        $close vcursor;
        $free vcursor;
    }
    $disconnect current;

return 0;
}

程序为简单的C中嵌入informix数据库,源文件为.ec文件,编译器为esql,头文件目录:$(INFORMIXDIR)/include,管理工具dbaccess,用法:dbaccess [dbname],dbschema,用法:dbschema [-t tabname] –d dbname [filename]

1、由预处理程序根据.ec文件生成.c文件

2、由系统指定的编译器将.c文件编译为obj文件

3、由系统连接程序将obj文件和静态库文件连接,生成可执行文件

所以必须为$CC指定合适的编译器,gcc或g++

linux下安装好informix后添加环境变量

LD_LIBRARY_PATH=$INFORMIXDIR/lib:$/INFORMIXDIR/lib/esql:$LD_LIBRARY_PATH;

export LD_LIBRARY_PATH;

编程

包含头文件:EXEC SQL include “dbdef.h”;

预定义变量:EXEC SQL define MAXLEN    64;

定义变量:

EXEC SQL BEGIN DECLARE SECTION;

char Fname[MAXLEN+1];

EXEC SQL END DECLARE SECTION;

打开数据库:

EXEC SQL connect to ‘dbname';

关闭数据库:

EXEC SQL disconnect current;

定义cursor

EXEC SQL declare cursorname cursor for select……

打开cursor

EXEC SQL open cursorname;

读取数据

EXEC SQL fetch cursorname;

判断操作是否成功

SQLCODE==0

判断数据是否已经结束

if( SQLCODE==100);

或者用下面的变成方式:

代码如下:

$include “appdef.h”;

$define MAXLEN  64;

$char Fname[MAXLEN+1];

$database dccdb;

$declare cursorname cursor for select……;

$open cursorname;

$fetch cursorname;

$close cursorname;

$free cursorname;

$disconnect current

下面是makefile的编写,一定要链接库函数,不然会出错

代码如下:

CC=gcc
exec01: exec01.o
    esql -o exec01 -L$(INFORMIXDIR)/lib exec01.o
exec01.o:
    esql -c -I$(INFORMIXDIR)/incl/esql exec01.ec
clean:
    rm -f exec01 *.o exec01.c exec01

(0)

相关推荐

  • C语言嵌入informix基础入门示例讲解

    复制代码 代码如下: #include <stdio.h>#include <string.h>#include <stdio.h>#include <sqlca.h> $struct _db_person{    char   name[30+1];    char   card[12+1];    int    age;}; char *trim(char *str){    char *p, *buffer;    int  len; if( NULL

  • C语言单链表的图文示例讲解

    目录 一.单链表的结构 二.单链表的函数接口 1. 申请结点及打印单链表 2. 尾插尾删 3. 头插头删 4. 中间插入和删除 1. 在 pos 指向的结点之后插入结点 2. 在 pos 指向的结点之前插入结点 3. 删除 pos 指向的结点的后一个结点 4. 删除 pos 指向的结点 6. 查找 7. 销毁单链表 在上一篇所讲述的 动态顺序表 中存在一些缺陷 1.当空间不够时需要扩容,扩容是有一定的消耗的 如果每次空间扩大一点,可能会造成空间的浪费,而空间扩小了,又会造成频繁的扩容2.在顺序表

  • html form表单基础入门案例讲解

    目录 一,表格标签 –1,概述 –2,总结 二,表单标签 –1,测试 –2,总结 –3,form提交数据 三,form表单的练习 四,CSS -1,概述 -2,语法 -3,入门案例 五,选择器 总结 一,表格标签 向网页中加入表格 –1,概述 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>测试 表格标签</title> </head&g

  • jQuery 选择器用法基础入门示例

    本文实例讲述了jQuery 选择器用法.分享给大家供大家参考,具体如下: 今儿个开始学习jQuery,在学习jQuery之前我们应该掌握js,我之前也写过几篇笔记,但是只是小部分的知识,js也不是很难 可以自己简单的看看.以后写js会经常用到jQuery这个库. 1 安装jQuery 1.1 从官网下载 可以从 jQuery.com 下载.有两个版本可以选择: production:被精简压缩过,常用于实际网站. development:源码,可读性高,常用于开发阶段. 1.2 CDN引入 百度

  • C语言编程C++柔性数组结构示例讲解

    目录 绕指柔-柔性数组 柔性数组的特点: 第一个好处是:方便内存释放 第二个好处是:这样有利于访问速度 总结 绕指柔-柔性数组 也许你从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的. C99 中,结构体中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员. 柔性数组的特点: 1.结构中的柔性数组成员前面必须至少一个其他成员. 2.sizeof 返回的这种结构大小不包括柔性数组的内存. 3.包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,

  • C语言示例讲解if else语句的用法

    目录 1.前言 2.if语句的语法结构 3.关于if else语句的示例 4.if else 书写形式的对比 5.例子 1.前言 (1)C语言是结构化的程序设计语言.C语言的三种基本程序结构分别是: 顺序结构:按照程序顺序执行 选择结构:根据判断结果选择分支方向 循环结构:指有一个循环体,可以根据判断条件决定循环多少次 (2)分支语句(选择语句)和循环语句 (3)什么是语句? C语言中由一个分号(;)隔开的就是一条语句. 2.if语句的语法结构 大致分为三种: if(表达式)    语句; if

  • C语言示例讲解switch分支语句的用法

    目录 1.了解switch分支语句 2.示例 3.default子句 4.练习 1.了解switch分支语句 switch语句也是一种分支语句,常常用于多分支的情况. 比如: 输入1,就会输出星期一 输入2,就会输出星期二 … 输入7,就会输出星期七 对于这样的代码需求,如果用if .else if.else的形式就会显得太复杂.如何用switch语句实现该功能呢?switch语句的结构又是怎样的呢? switch(整型表达式){    语句项;} 其中,整型表达式必须为整型,且为常量(字符也可

  • Sublime Text 3 实现C语言代码的编译和运行(示例讲解)

    Sublime Text 3是一款优秀的代码编辑软件.界面简洁,轻巧快速,很受大家的欢迎. 最近开始用他来编辑数据结构的代码,这就需要在新建编译系统. 具体方法如下: 首先: 接下来是关键的一步,将以下代码粘贴到弹出的编辑页面中,文件名为name.sublime-build形式,name是新建的编译器名字. { "cmd": ["gcc","${file}","-fexec-charset=gbk","-o"

  • go语言基础语法示例

    周末天气不好,只能宅在家里,于是就顺便看了一下Go语言,觉得比较有意思,所以写篇文章介绍一下.我想写一篇你可以在乘坐地铁或公交车上下班时就可以初步了解一门语言的文章.所以,下面的文章主要是以代码和注释为主.只需要你对Java,Python,C等编程语言有一点基础,我相信你会在30分钟左右读完并对Go语言有一些初步了解的. 本文的唯一目的,就是希望大家阅读之后,能够了解go语言长什么样子... Hello World package main //声明本文件的package名 import "fm

  • Laravel基础_关于view共享数据的示例讲解

    1.所有视图共享数据(share) 当所有视图都需要同一个数据时,使用视图工厂的share方法. 全局帮助函数view,如果传入参数,则返回Illuminate\View\View实例,不传入参数则返回Illuminate\View\Factory实例.所以我们可以通过在服务提供者(app\Providers\AppServiceProvider.php)的boot方法中使用如下方式实现视图间共享数据: /** * Bootstrap any application services. * *

随机推荐