摘要:隨著SQL Server 2005數據庫使用的普及,在Java 應用程序中使用基于Java Database Connectivity (JDBC)的驅動程序來訪問SQL Server 2005數據庫已經成為十分必要的工作。特別是隨著XML成為工業標準,越來越多的Java應用程序趨向于使用XML配置文件。論文結合實例講述了在JSP/Servlet中使用JDBC驅動及XML配置文件訪問SQL Server 2005數據庫的典型應用方式。
關鍵詞:JDBC; SQL Server 2005; XML; JDOM; JSP/Servlet; JBuilder
中圖分類號:TP312文獻標識碼:A文章編號:1009-3044(2008)05-10ppp-0c
1 引言
JSP是一種基于Java Servlet的Web開發技術。目前,JSP/servlet 結合大型或超大型網絡數據庫已經成為電子商務站點的流行架構。在傳統的網頁HTML文件中加入Java程序代碼,就構成了JSP頁面。當Web服務器上的一個JSP頁面被第一次請求執行時,JSP引擎首先將此JSP頁面文件轉譯成一個java Servlet文件,再將這個java文件編譯成字節碼文件,然后通過執行字節碼文件響應客戶請求。
JDBC(Java Database Connectivity)是Java語言訪問數據庫的一種規范, 它是一個面向對象的應用程序接口(API),是Java核心類庫的一部分。為了使JAVA應用程序獨立于特定的數據庫驅動程序,JDBC規范建議開發者使用基于接口的編程方式,即盡量使用僅依賴java.sql及javax.sql中的接口和類。通過使用JDBC,Java應用程序可以訪問各種不同類型的關系數據庫,完成建立數據庫連接、執行SQL語句進行數據的增、刪、改、查操作。JDBC確保了“100%純Java”的解決方案,利用Java的平臺無關性, JDBC應用程序可以自然地實現跨平臺特性,因而更適合于Internet上異構環境的數據庫應用。
隨著SQL Server 2005數據庫使用的普及,在Java 應用程序中使用基于JDBC驅動程序來訪問SQL Server 2005數據庫已經成為十分必要的工作。特別是隨著XML成為工業標準,越來越多的Java應用程序趨向于使用XML配置文件。下面結合實例講述在JSP/Servlet中使用JDBC驅動及XML配置文件訪問SQL Server 2005數據庫的典型應用方式。
2 JDBC驅動程序的下載及設置
首先需要下載SQL Server 2005的JDBC驅動程序,下載后需要對機器的環境變量以及JBuilder或Eclipse開發環境進行配置。
2.1 JDBC驅動程序的下載
首先下載SQL2005的JDBC驅動程序,這是微軟官方下載地址:http://download.microsoft.com/download/2/8/9/289dd6a3-eeeb-46dc-9045-d0c6b59bfbc1/sqljdbc_1.1.1501.101_chs.exe。將文件“sqljdbc_1.1.1501.101_chs.exe”下載后解壓,會默認解壓生成一個名為“Microsoft SQL Server 2005 JDBC Driver”的文件夾。將此文件夾復制到%ProgramFiles%文件夾下(如果系統在C盤則為C:\\Program Files)。復制后的文件夾內容如圖1所示。

圖1 JDBC驅動程序文件夾結構
2.2 設置系統環境變量CLASSPATH
JDBC 驅動程序并未包含在 Java SDK 中。因此,如果要使用該驅動程序,必須將CLASSPATH設置為包含sqljdbc.jar 文件,即“CLASSPATH =.;C:\\Program Files\\sqljdbc_1.1\\chs\\sqljdbc.jar”,否則Java應用程序在加載JDBC驅動時,將引發“找不到類”的常見異常。
2.3 配置JBuilder
打開JBuilder2005開發環境, 創建一個名為\"JDBC_SQL2005\"的項目。在此項目中創建一個名為\"JDBCTest\"的Web Module。在此Web Module中創建一個名為\"JDBC_SQL2005.jsp\"的JSP應用程序頁面。此時整個項目在“Project”窗口中顯示如圖2所示。

圖2 JSP應用程序項目結構圖
選擇\"Project\"->\"Project Properties\"菜單項,打開此項目的屬性配置窗口 。切換到\"Required Libraries\"面板,點擊\"Add\"按鈕,向此工程中添加JDBC驅動類庫文件,如圖3所示。點擊\"Add\"按鈕后,選擇\"New\"按鈕。在打開的窗口中先給要加載的JDBC驅動起個名字\"SQLJDBC\"。點擊\"Add\"按鈕,再在彈出的窗口中選擇安裝在\"C:\\Program Files\\sqljdbc_1.1\\chs\"文件夾下的\"sqljdbc.jar\"文件后,點擊\"OK\"按鈕。此時JDBC驅動程序已加載到當前的項目中,如圖3所示。

圖3 向JSP應用程序項目添加JDBC驅動類庫
3 SQL Server 2005數據庫系統的配置
SQL Server是一個設計用于在服務器上運行,能夠接受遠程用戶和應用程序訪問的數據庫管理系統。而SQL Server 2005的設計原則之一就是“Trustworthy Computing initiative”——Secure by Default(“默認安全”)。在實現這一原則的過程中,SQL Server 2005禁用了一些網絡選項以盡量保證SQL Server環境的安全性。例如,SQL Server 2005在默認情況下并不允許遠程訪問(企業版除外),即不允許使用TCP/IP協議,所以要使用“SQL Server外圍應用配置器”工具來啟用遠程訪問。
3.1 啟用遠程訪問
選擇“開始”→“程序”→“Microsoft SQL Server 2005”→“配置工具”→“SQL Server 外圍應用配置管理器”菜單,在打開的窗口中選擇“服務和連接的外圍應用配置器”選項。此時會彈出“服務和連接的外圍應用配置器”窗口。在“遠程連接”中選擇“同時使用TCP/IP和named pipes(B)”,然后點擊“確定”按鈕,如圖4所示。

圖4 啟用TCP/IP協議

圖5 啟用TCP/IP協議
3.2 啟用SQL Server 2005網絡配置中的TCP/IP協議
選擇“開始”→“程序”→“Microsoft SQL Server 2005”→“配置工具”→“SQL Server Configuration Manager”菜單,在打開的窗口左側選擇“SQL Server 2005 網絡配置”項下面的“SQLEXPRESS的協議”選項,將其對應的TCP/IP協議設置為“啟用”,如圖5所示。
3.3 配置啟用的TCP/IP協議
修改TCP/IP屬性,將全部偵聽改為“否”,同時將TCP動態端口改為空(讓服務器自己選擇端口), TCP端口改為1433,如圖6所示。重新啟動計算機,或重新啟動SQL Server2005 express服務。

圖6 配置TCP/IP協議
4 使用jdom讀取XML配置文件
當創建JDBC到SQLServer 2005數據庫的連接時,需要提供數據庫服務器IP地址、用戶名、密碼以及所要訪問的數據庫等信息。為了使我們的JSP/Servlet應用程序有較好的安全性和可移值性,一般要把這些信息寫在一個配置文件中,并將此配置文件存放到應用程序所在的“WEB-INF”文件夾下,此文件夾是禁止瀏覽器訪問的。隨著XML成為工業標準,越來越多的Java應用程序趨向于使用XML配置文件。
文檔對象模型(Document Object Model,DOM)是公認的 W3C 標準,它被用于與平臺及語言無關的 XML 文檔內容、結構和樣式的動態訪問和更新。它為表示文檔定義了一套標準的接口集,也為訪問和操縱文檔定義了一套標準的方法。而jdom是用java語言讀、寫、操作XML的API。用jdom處理現有XML文檔的大致過程如下:
用構造方法構造一個org.jdom.input.SAXBuilder對象。
用建立器的build()方法從reader,inputstream,url,file或包含系統id的字符串建立Document對象。
如果讀取文檔遇到問題,則拋出IOexception,如果建立文檔遇到問題,則拋出JDOMException。
否則用Document類,element類和其他jdom類的方法在文檔中建立導航。
4.1 jdom的下載及配置
目前jdom并沒有包含在sun的jdk中,需要到http://www.jdom.org下載jdom的最新版本。將文件“jdom-1.0.zipjdom-1.0.zip下載后解壓,會默認解壓生成一個名為“jdom-1.0”的文件夾。將此文件夾復制到%ProgramFiles%文件夾下(如果系統在C盤則為C:\\Program Files)。復制后的文件夾內容如圖7所示。jdom的jar文件就是build目錄下的文件jdom.jar。再在JBuilder2005開發環境中,將“jdom.jar”添加到當前的項目中,如圖8所示。

圖7 jdom.jar文件所在位置

圖8 將jdom.jar添加到當前的項目
4.2 創建XML配置文件
在Web Module“JDBCTest”的“WEB-INF”文件夾下新建一個名為“DBConfig.xml”的XML文件,其內容為需要連接的SQL Server 2005數據庫所在的服務器IP地址、端口號、數據庫登錄用戶名、密碼及要訪問的數據庫名信息。其代碼如下:
<?xml version=\"1.0\"?>
<DBConfig>
<ipaddress>127.0.0.1</ipaddress>
<port>1433</port>
<database>master</database>
<user>sa</user>
<password>sa</password>
</DBConfig>
4.3 JSP頁面程序設計
JSP頁面利用JDBC驅動連接SQL Server 2005系統數據庫master,并檢索表MSreplication_options中的所有記錄。如果檢索成功,則在頁面中顯示出相應信息,如果操作失敗,則報告異常。JSP頁面代碼如下,此JSP頁面運行效果如圖9所示。

圖9 JDBC_SQL2005.JSP運行效果
<%@page import=\"java.io.InputStream,
java.io.IOException,
java.io.FileInputStream,
org.jdom.input.SAXBuilder,
org.jdom.Document,
org.jdom.Element,
org.jdom.JDOMException,
org.jdom.*,
java.sql.*\"%>
<%@page contentType=\"text/html;charset=GB2312\" language=\"java\"%>
<html>
<head>
<title>使用JDBC驅動及XML配置訪問SQL Server 2005數據庫</title>
</head>
<body>
<center>
<%
String ipaddress, port, database, user, password;
Connection con = 1;
Statement s = 1;
ResultSet rs = 1;
try {
//構造一個SAXGBuilder對象
SAXBuilder db = new SAXBuilder();
//取得XML配置文件的絕對路徑
String filepath =
pageContext.getServletContext().getRealPath(\"WEB-INF\\\\DBConfig.xml\");
//創建文檔
Document doc = db.build(new FileInputStream(filepath));
//獲得這個文檔的根元素
Element root = doc.getRootElement();
//獲取各個元素的值
ipaddress = root.getChild(\"ipaddress\").getText();
port = root.getChild(\"port\").getText();
database = root.getChild(\"database\").getText();
user = root.getChild(\"user\").getText();
password = root.getChild(\"password\").getText();
//輸出從XML文檔中提取的配置信息
out.println(\"數據庫所在的服務器IP地址:\" + ipaddress + \"<br>\");
out.println(\"端口號:\" + port + \"<br>\");
out.println(\"用戶名:\" + user + \"<br>\");
out.println(\"密碼:\" + password + \"<br>\");
}
catch (JDOMException jdome) {
throw new IOException(jdome.getMessage());
}
try {
//加載JDBC數據庫驅動程序
Class.forName(\"com.microsoft.sqlserver.jdbc.SQLServerDriver\");
}
catch (ClassNotFoundException ce) {
System.out.println(\"JDBC驅動加載失敗!\");
System.out.println(ce);
}
try {
String str = \"select * from dbo.MSreplication_options\";
// 創建數據庫連接,要提供主機IP地址、端口號、用戶名、口令等信息
con = DriverManager.getConnection(
\"jdbc:sqlserver://\" + ipaddress + \":\" + port + \";DatabaseName=\" + database,
user, password);
//執行SQL語句,得到結果集
s = con.createStatement();
rs = s.executeQuery(str);
if (rs.next()) {
out.print(database + \"數據庫成功訪問\");
}
rs.close();
}
catch (SQLException se) {
System.out.println(database + \"數據庫訪問失敗!\");
System.out.println(se);
}
finally {
try {
if (s != 1) {
s.close();
}
if (con != 1) {
con.close();
}
}
catch (SQLException se2) {
System.out.println(\"數據庫連接關閉失敗!\");
System.out.println(se2);
}
}
%>
</center>
</body>
</html>
5 結束語
Java與XML的組合被普遍認為是“黃金組合”。JDBC技術的使用,可以實現對因特網上異構環境的數據庫的訪問,已經成為Web開發的首選方案。相信隨著SQL Server 2005使用的普級,在使用JDBC訪問SQL Server 2005數據庫時采用XML配置文件也一定會被更廣泛的使用。
參考文獻:
[1]馬斗.專家門診——JSP開發答疑[M].北京: 人民郵電出版社,2006年5月?P151-152.
[2]imetoo的資料室?數據庫安全基本原則[OL].http://imetoo.blog.hexun.com/,2007年10月24日/2007年10月27日.
收稿日期:2008-01-12
作者簡介:王萍(1973-),女,湖北漢陽人,計算機應用專業碩士,現為北京電子科技職業學院科技工程學院電子工程系講師,主要研究方向:信息管理與服務系統架構與開發。