概述
本节旨在详细介绍如何在C语言程序与嵌入式SQL语句之间,利用宿主变量实现高效、安全的数据传递。
在嵌入式SQL-C程序中,C语言被视为宿主语言。凡是定义在C代码中并在EXEC SQL语句里被引用的变量,统称为宿主变量。它们是打通C语言内存空间与数据库内核数据之间的核心媒介。
数据交互的本质是C语言原生数据类型与GaussDB数据类型之间的匹配。为了确保数据在传递过程中不发生精度丢失、类型冲突或内存溢出,须深刻理解类型映射机制。在声明宿主变量时,需要根据GaussDB底层字段的属性,选择与之对应的C语言数据类型(包括初级类型、结构体、联合体及数组等),从而在预编译阶段建立精准的数据对齐。
在SQL语句中引用宿主变量时,无需手动将数据拼接至字符串中。您只需在变量名前添加冒号(:)作为前缀,ecpg预处理器即可自动识别并处理。这种参数化的引用方式不仅简化了开发,更从根本上增强了程序防御SQL注入攻击的能力。
示例如下:
EXEC SQL INSERT INTO sometable VALUES (:v1, 'foo', :v2);
该语句同时引用了两个C语言变量v1和v2。这表明在同一条SQL语句内,宿主变量可以与普通的SQL常量(如'foo')混合使用,极大地提升了语句构建的灵活性。