暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

“G”术时刻:Linux环境下C语言通过ESQL/C连接GBase 8s数据库

GBASE数据库 2025-07-16
127


在Linux环境中,使用C语言通过ESQL/C 方式连接GBase 8s数据库是常见的开发需求。本文将详细介绍如何在Linux下通过ESQL/C连接GBase 8s数据库,包括环境搭建、代码编写、编译和运行等步骤。


ESQL/C是一种允许在C程序中嵌入SQL语句的技术。通过ESQL/C,开发者可以在C程序中直接操作数据库,实现数据的增删改查等功能。本文将通过一个完整的示例,展示如何在Linux下使用ESQL/C连接GBase 8s数据库。


环境准备


数据库信息


以下是示例中使用的数据库服务器信息:



GBase 8s ESQL/C介绍


GBase 8s ESQL/C是一个SQL应用程序编程接口(API),允许在C程序中嵌入SQL语句。ESQL/C的预处理器esql将SQL语句转换为C语言源代码,并启动C编译器进行编译。


ESQL/C由以下组件构成:


  • GBase 8s ESQL/C库:提供用于访问数据库服务器的C函数。


  • ESQL/C头文件:提供数据结构、常量和宏定义。


  • esql命令:处理ESQL/C源代码以创建C源文件,并将其传递给C编译器。


  • finderr 实用程序:在UNIX系统上用于获取 GBase 8s的错误消息。


  • GLS语言环境和代码集转换文件:提供特定语言环境的信息。


Linux下的CSDK安装及配置


(一)安装CSDK


1、创建用户组和用户


• 创建gbasedbt用户组和用户:



2、解压缩CSDK软件包


• 创建目录并解压软件包:



3、执行静默安装


• 使用以下命令进行静默安装:



(二)配置CSDK


1、设置环境变量


• 以gbasedbt用户身份登录,并设置以下环境变量:



2、 修改GBASEDBTSQLHOSTS 配置文件


• 在配置文件中添加以下内容:



ESQL/C代码示例


以下是一个完整的ESQL/C示例代码,展示如何连接到GBase 8s数据库并执行一些基本操作。


示例代码


    #include <stdio.h>
    EXEC SQL define NAME_LEN 20;
    EXEC SQL define ADDRESS_LEN 200;
    main()
    {
       EXEC SQL BEGIN DECLARE SECTION;
       int rnum;
       int snum;
       char sname[NAME_LEN + 1];
       char saddress[ADDRESS_LEN + 1];
       EXEC SQL END DECLARE SECTION;
       EXEC SQL WHENEVER ERROR STOP;
       EXEC SQL connect to 'testzh';
       // Drop table
       EXEC SQL drop table if exists tab2;
       printf("Drop table successfully.\n\n");
       // Create table
       EXEC SQL create table tab2 (num int, name char(20), address varchar2(200));
       printf("Create table successfully.\n\n");
       // Insert without using host variables
       EXEC SQL insert into tab2 values (1"Jack""Beijing");
       printf("Insert (without using host variables) successfully.\n\n");
       // Insert using host variables
       snum = 2;
       sprintf(sname, "Mary");
       sprintf(saddress, "Shanghai");
       EXEC SQL insert into tab2 values (:snum, :sname, :saddress);
       printf("Insert (with using host variables) successfully.\n\n");
       // Use a static SQL statement to select data
       EXEC SQL declare mycursor1 cursor for
       select num, name, address from tab2;
       EXEC SQL open mycursor1;
       printf("The output of the first select statement:\n");
       for (;;)
       {
           EXEC SQL fetch mycursor1 into :snum, :sname, :saddress;
           if (strncmp(SQLSTATE, "00"2) != 0)
               break;
           printf("%d %s %s\n", snum, sname, saddress);
       }
       if (strncmp(SQLSTATE, "02"2) != 0)
           printf("SQLSTATE after fetch is %s\n", SQLSTATE);
       EXEC SQL close mycursor1;
       EXEC SQL free mycursor1;
       // Use a dynamic SQL statement to select data
       EXEC SQL prepare mystmt from "select num, name, address from tab2 where num = ?";
       EXEC SQL declare mycursor2 cursor for mystmt;
       rnum = 2;
       EXEC SQL open mycursor2 using :rnum;
       printf("\nThe output of the second select statement:\n");
       for (;;)
       {
           EXEC SQL fetch mycursor2 into :snum, :sname, :saddress;
           if (strncmp(SQLSTATE, "00"2) != 0)
               break;
           printf("%d %s %s\n", snum, sname, saddress);
       }
       if (strncmp(SQLSTATE, "02"2) != 0)
           printf("SQLSTATE after fetch is %s\n", SQLSTATE);
       EXEC SQL close mycursor2;
       EXEC SQL free mystmt;
       EXEC SQL free mycursor2;
       EXEC SQL disconnect current;
       exit(0);
    }


    编译和运行


    1、将代码保存为Demo.ec文件。


    2、使用esql命令编译:


        esql Demo.ec


      3、编译生成的C文件:


         gcc -o Demo Demo.c -I${GBASEDBTDIR}/include -L${GBASEDBTDIR}/lib -lcli


        4、运行程序:


           ./Demo


          程序运行结果


          运行上述程序后,你将看到以下输出:



          通过本文的介绍,相信您已经了解了如何在Linux下通过ESQL/C连接GBase 8s数据库了。




          本期供稿 | GBase 8s产品经营部

          本期编辑 | Suse

          内容审核 | 生态发展部



          文章转载自GBASE数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论