陆廷荣
摘要:为解决目前高校数据库课程讲授嵌入式SQL面临的问题,本文阐述了用开源数据库PostgreSQL讲授嵌入式SQL的过程。用开源数据库PostgreSQL讲授嵌入式SQL,既充分说明了嵌入式SQL的概念、工作原理、执行过程,还介绍了开源软件的概念,展示了开源软件用于教学的一个良好范例。
关键词:嵌入式SQL;PostgreSQL;数据库课程;开源软件
中图分类号:G642.3文献标识码:A文章编号:1002-4107(2012)02-0042-02
一、引言
SQL(Structured Query Language)语言是标准化的数据库操作语言[1]。嵌入式SQL是ODBC(Open Data Base Connectivity)、JDBC(Java Data Base Connectivity)等数据库访问接口标准出现之前的编程语言访问数据库的编码规范[2],是指将SQL语句嵌入到宿主语言(Host language)中,比如,嵌入到C/C++、Java等编程语言中,既利用SQL语言的数据库操作能力,又克服SQL语言无流程控制语句无法实现复杂逻辑的限制。嵌入式SQL是数据库课程中的重要内容[3]。
目前高校数据库课程的上机实验环境多数是MS Windows平台上的MS SQL Server 2005(Express)。MS
SQL Server 2005(Express)已不再支持嵌入式SQL。MS Windows平台上的其他主流数据库管理系统如Oracle、DB2、MS SQL Server 2000等支持嵌入式SQL,但Oracle、DB2、MS SQL Server 2000等都是有版权保护的商品数据库管理系统,使用存在限制,并且MS SQL Server 2000已是十年前的过时产品,实际生产系统已很少应用。因此,我们把讲授嵌入式SQL的上机实验环境转向可自由使用的开源数据库。
目前主流开源数据库管理系统有MySQL[4]、PostgreSQL[5]、Ingres[6]、Firebird[7]、SQLite[8]等。MySQL是使用最广泛的开源数据库管理系统,但目前版本不支持嵌入式SQL。Firebird是轻型数据库管理系统,是否支持嵌入式SQL缺乏文献支持。SQLite是嵌入式数据库管理系统,同样不支持嵌入式SQL。具有同一历史渊源的PostgreSQL、Ingres支持嵌入式SQL,根据数据库支持工具的丰富程度、文献丰富程度、开源项目的活跃程度,最后作者选择PostgreSQL作为讲授嵌入式SQL的上机实验环境。
下面介绍用开源数据库PostgreSQL讲授嵌入式SQL处理的关键过程。
二、嵌入式SQL的处理过程
嵌入式SQL的处理过程一般如下所述。首先,使用具体DBMS的依赖具体宿主语言的预处理器将嵌入式SQL的宿主语言源程序转换成合法宿主语言源程序,相应的嵌入式SQL语句转换成宿主语言函数调用。再使用宿主语言编译器将预处理过的嵌入式SQL的宿主语言源程序编译成目标代码。最后使用宿主语言链接器将目标代码与具体DBMS的函数库链接生成能访问数据库的可执行代码。嵌入式SQL的处理过程如图1所示。
三、嵌入式SQL在PostgreSQL数据库中的
处理过程
本文中操作系统平台是MS Windows;DBMS使用PostgreSQL 9.0;C编译器使用开源软件MinGW[9] C编译
器gcc;C链接器使用MinGW C链接器ld。
预处理器使用pgtypes library将嵌入式SQL的数据类型映射成C语言数据类型。
嵌入式SQL预处理器将嵌入式SQL C源程序中的嵌入式SQL语句转换成函数调用,使其成为一个纯粹的C源程序。纯粹的C源程序用C编译器编译成目标代码。目标代码的链接阶段要包含实现嵌入式SQL语句转换成的函数调用的函数库。
PostgreSQL数据库中嵌入式SQL C源程序文件的扩展名通常为“.pgc”,比如,esql.pgc。
(一)嵌入式SQL预处理阶段
PostgreSQL数据库的嵌入式SQL预处理器是ecpg,预处理阶段的命令行命令是,ecpg esql.pgc。
在正确预处理后将生成宿主语言源程序——同名的C源程序,esql.c。
(二)宿主语言编译阶段
使用MinGW C编译器gcc,gcc -I“D:MinGWincl-
ude” -I“C:Program FilesstgreSQL9.0include” -c esql.c。
其中“-I”开关用于指示编译过程所需库文件的查找路径。“-c”开关用于指示只编译成目标代码而不自动执行链接过程生成可执行文件。
在正确编译后将生成同名的目标代码文件,esql.o。
(三)目标代码链接阶段
使用MinGW C链接器ld,ld -o esql.exe esql.o -L “C:Program FilesPostgreSQL9.0lib”lecpg。
其中“-o”开关用于指示生成可执行文件名,否则默认将生成UNIX/Linux规范的可执行文件名。“-L”开关用于指示编译过程所需库文件的查找路径。“-l”开关用于指示链接的库文件。
在正确编译后将生成同名的可执行代码文件,esql.exe。
本文分析了目前高校数据库课讲授嵌入式SQL面临的问题,讨论了用开源数据库PostgreSQL讲授嵌入式SQL的过程。用开源数据库PostgreSQL讲授嵌入式SQL,既充分说明了嵌入式SQL的概念、工作原理、执行过程,还同时介绍了开源软件的基本概念,展示了开源软件用于教学的一个良好范例。
参考文献:
[1]SO/IEC 9075-1:2008 Information technology—Dat-
abase languages—SQL—Part 1:Framework(SQL/Fra-
mework)[EB/OL].http://www.iso.org/iso/catalogue_
detail.htm?csnumber=45498,2011.
[2]ISO/IEC 9075-3:2008 Information technology—
Database languages—SQL—Part 3:Call-Level Int-
erface(SQL/CLI)[EB/OL].http://www.iso.org/iso/
iso_catalogue/catalogue_tc/catalogue_detail.htm?
csnumber=38641,2011.
[3]王珊,萨师煊.数据库系统概论(第四版)[M].高等教育
出版社,2006.
[4]MySQL[EB/OL].http://www.mysql.com/,2011.
[5]PostgreSQL[EB/OL].http://postgresql.org/,2011.
[6]Ingres[EB/OL].http://www.ingres.com/,2011.
[7]Firebird[EB/OL].http://www.firebirdsql.org/,2011.
[8]SQLite[EB/OL].http://www.sqlite.org/,2011.
[9]MinGW|Minimalist GNU for Windows[EB/OL].http:
//www.mingw.org/,2011.