知识卡片
嵌入式SQL需要解决的四类技术问题及预编译机制
内容
把SQL语句直接写进C、Java这类高级语言的源代码里,看似只是”混着写”, 实际要跨越四道技术障碍才能真正跑起来:宿主语言的编译器根本不认识 SQL语法,需要解决怎么把混合代码编译成可执行程序的问题;宿主语言的 程序如何向数据库管理系统传递数据和执行请求;SQL一次查询返回的是 一个结果集(多条记录),而宿主语言习惯”一次处理一个值”,需要解决 怎么把查询结果逐条赋给宿主语言变量的问题(这也是嵌入式SQL里游标 存在的原因);数据库的数据类型和宿主语言的数据类型不总是一一对应, 需要处理类型转换。解决这些问题的核心机制是预编译:数据库管理系统 提供一个预处理步骤,把源代码里带有EXEC SQL前缀的嵌入式SQL语句 转换成一系列对数据库函数库的普通函数调用,转换后的代码就是纯宿主 语言代码,可以直接交给宿主语言原生的编译器处理——这个转换步骤把 “编译器不认识SQL”这个根本障碍,变成了”数据库厂商只需要提供一套函数 库”这个可解决的工程问题,是嵌入式SQL能够落地的关键设计。
参考来源
- 位置:《数据库原理(微课版)》第8章《数据库编程》8.4.1节"嵌入式SQL"
(源文件:_epub-src/index_split_005.html)
- 结论依据:原文明确"宿主语言的编译器不能识别SQL语句,需要解决如何
将SQL的宿主语言源代码编译成可执行代码的问题……数据库管理系统一般
采用预编译方法,把包含嵌入式SQL语句的宿主语言源代码转换成纯宿主
语言的代码……经过预编译之后,原有的嵌入式SQL语句会被转换成一系列
函数调用",因此可以推出四类技术问题及预编译机制如何解决核心障碍。
- 原始内容:宿主语言的编译器不能识别SQL语句……数据库管理系统一般
采用预编译方法,把包含嵌入式SQL语句的宿主语言源代码转换成纯宿主
语言的代码……经过预编译之后,原有的嵌入式SQL语句会被转换成一系列
函数调用。