一、三类接口定义总览
- 库函数级别访问接口:数据库厂商提供专用原生API函数库,语言绑定专属函数,厂商私有、不通用;
- 嵌入式SQL(ESQL):在宿主语言(C/C++/Java/COBOL)代码中直接嵌入SQL语句,预编译工具转换为原生库函数调用;
- 通用数据接口标准:跨数据库统一标准API,一套代码可切换多种数据库,屏蔽数据库差异,如ODBC、JDBC。
二、分别详解+示例
1. 库函数级别访问接口(原生API)
核心特点
- 数据库厂商专属C/Java/Python函数库,私有接口;
- 无统一规范,MySQL、Oracle、SQL Server函数完全不兼容;
- 无需中间转换,直接调用底层驱动函数,性能最高;
- 切换数据库需要重写全部数据库操作代码。
例子
- MySQL C API:
mysql_connect()、mysql_query()、mysql_fetch_row() - Oracle OCI:OCIAllocEnv、OCIStmtExecute 等专属函数
伪代码示例(MySQL C原生库)
// 原生库函数,仅MySQL可用
MYSQL *conn = mysql_init(NULL);
mysql_real_connect(conn,"127.0.0.1","root","123","test",3306,NULL,0);
mysql_query(conn,"select * from student");
优缺点
优点:底层直连、性能最优; 缺点:绑定单一数据库,可移植性极差,学习成本高。
2. 嵌入式SQL ESQL
核心特点
- 在普通程序代码里直接写
EXEC SQL包裹SQL; - 专用预编译器先行扫描代码,把内嵌SQL翻译成对应数据库原生库函数;
- SQL与宿主代码混写,语法有固定格式;
- 数据库绑定,换库要改预编译工具与SQL兼容语法。
示例(C语言嵌入SQL,Oracle Pro*C)
#include <stdio.h>
EXEC SQL INCLUDE SQLCA; // 嵌入式SQL头文件
int main(){
EXEC SQL CONNECT :user IDENTIFIED BY :pwd; // 内嵌SQL连接
EXEC SQL SELECT name INTO :stuName FROM student WHERE id=1;
printf("姓名:%s", stuName);
EXEC SQL COMMIT WORK;
return 0;
}
编译流程:Pro*C预编译 → 生成标准C代码 → gcc编译链接OCI库
优缺点
优点:SQL直观嵌入代码,适合传统大型业务系统(COBOL银行系统); 缺点:依赖预编译工具,不跨库,代码耦合重,现代开发极少使用。
3. 通用数据接口标准(ODBC/JDBC)
核心特点
- 行业统一标准规范,中间层隔离应用与数据库;
- 应用只调用标准统一API,底层靠不同数据库驱动适配;
- 一套业务代码,更换MySQL/Oracle/SQL Server只需更换驱动、改连接串;
- 分层架构:应用层→标准API→驱动→数据库原生接口。
两类代表
- ODBC:C语言通用标准,Windows/跨平台,几乎所有语言可调用;
- JDBC:Java专属统一数据库标准接口。
JDBC示例(通用标准,换库仅改驱动类、URL)
// 标准统一接口,MySQL/Oracle通用代码结构
Class.forName("com.mysql.cj.jdbc.Driver"); // 仅驱动不同
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test","root","123");
PreparedStatement pstmt = conn.prepareStatement("select * from student");
ResultSet rs = pstmt.executeQuery();
优缺点
优点:可移植性极强、解耦数据库,现代开发主流; 缺点:多一层驱动封装,性能略低于原生库函数。
三、三维对比表格
| 对比维度 | 库函数原生接口 | 嵌入式SQL ESQL | 通用标准接口(ODBC/JDBC) |
|---|---|---|---|
| 标准化 | 厂商私有,无统一标准 | 数据库专属,不通用 | 国际统一标准,跨数据库 |
| 可移植性 | 极差,换库需重写数据库代码 | 差,依赖对应预编译器 | 优秀,一套代码适配多数据库 |
| 使用方式 | 直接调用底层API函数 | 代码内嵌SQL,预编译转换 | 调用统一抽象接口,驱动适配底层 |
| 性能 | 最优(无中间层) | 较好(预编译转原生调用) | 略低(多层封装) |
| 开发模式 | 底层编码,繁琐 | 传统大型系统、COBOL遗留项目 | 现代Web/后端主流方案 |
| 代表产品 | MySQL C API、Oracle OCI | Pro*C、Informix ESQL | ODBC、JDBC |
四、总结
- 库函数接口:数据库原生私有API,性能最高,不可移植;
- 嵌入式SQL:代码内嵌SQL,经预编译转为原生函数,传统系统使用,跨库困难;
- 通用数据接口:ODBC/JDBC统一标准,通过驱动屏蔽数据库差异,可移植性强,当前主流。
注意:本文归作者所有,未经作者允许,不得转载