陸廷榮
摘要:為解決目前高校數據庫課程講授嵌入式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.