“G”术时刻:Linux环境下通过ESQL/C方式连接南大通用GBase 8s数据库(下)

在 Linux 环境中,使用 C 语言通过 ESQL/C 方式连接南大通用 GBase 8s 数据库是常见的开发需求。ESQL/C 是一种允许在 C 程序中嵌入 SQL 语句的技术。通过 ESQL/C,开发者可以在 C 程序中直接操作数据库,实现数据的增删改查等功能。本文将通过一个完整的示例,详细介绍如何在 Linux 下通过 ESQL/C 连接 GBase 8s 数据库,包括环境搭建、代码编写、编译和运行等步骤。
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

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

Drop table successfully.
Create table successfully.
Insert (without using host variables) successfully.
Insert (with using host variables) successfully.
The output of the first select statement:
1 Jack Beijing
2 Mary Shanghai
The output of the second select statement:
2 Mary Shanghai

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

posted @ 2025-07-11 17:10  GBASE南大通用  阅读(6)  评论(0)    收藏  举报