從伺服器端促進程式快速開發的Java Server Pages (JSP)決定它成為一種廣為流行的工具。雖然呆板的一面仍然存在,然而無論它包含多少缺點,JSP能夠為Web程式設計者提供很多東西,尤其是與資料庫的輸入和輸出操作與資料的處理。
透過JSP來進行資料庫存取不需要太多的引導。問題是如何使開發者能夠接受Web程式的資料庫存取比傳統的本地OLAP系統的資料庫存取更具吸引力,並且使他們認識到,整潔和簡要的資料存取方法才是關鍵的。在這一點上,JSP可以很好地解決。
你能夠做哪些?
如果你正在編寫高資料量、資料密度大的Web程式時,你的資料庫存取應該具備哪一方面的要求?如果你正在使用JSP,那麼你必須處理大量的伺服器端的資料。程式也許需要大量的數據,或是很多用戶,或是這二者的結合。你所考慮的可能範圍還會包括:效能的最佳化,可偵測性,每一用戶的多個查詢的影響,查詢的複雜性,以及當單一的會話處理大量資料時,高等級的類型轉換。
這其中包含大規模的處理。但是,JSP能夠幫助你很好地處理,因為它能夠與Java Database Connectivity API (JDBC)很好的相容。你可以將JDBC包含在JSP程式碼中,而JDBC能夠傳遞宣告執行類似資料庫的命令,只要你能正確地使用JDBC驅動程式。
開始
這裡是一個通常的、抽象的JSP程式執行的體系。首選的JSP設計模式為模型-視圖-控制器(MVCModel-View-Controller),即傳統三層體系的一種變異,以更好的適合於伺服器程式。在JSP的MVC設計模式中,Model指的是程式的邏輯與數據,View為查看,以及Controller為請求處理。
當你設計一個JSP程式時,在客戶端與伺服器互動之間建立第一步驟的頁面,這是最好的過程。例如,在一個典型程序中,在資料交換中的每一個特定步驟都會有頁面:一個資料入口頁面,一個驗證請求頁面,一個資料庫回應頁面,以及這些頁面的子頁面(一個更改記錄的頁面,一個刪除記錄的頁面,等等)。
你可以將JDBC嵌入到每一頁中,以完成被要求的資料庫操作。然而,這項操作也會冒很大的風險,因為由於混合了JSP和JDBC而混合了整個程式——JDBC是基於SQL。這也就是SQL被封裝在JDBC,而JDBC也被封裝在JSP──這也夠讓你暈頭轉向的。如果你選擇這個方法,你將會獲得你想要的功能,但一定要確保你的程式邏輯與資料庫存取程式碼的關係非常清晰,這一點格外小心。
嵌入式JDBC
JDBC API不會直接與資料庫進行交流。其中的驅動程式完成的實際的連接,你可以在賣方的Web網站上下載這些驅動程式。除此之外,還有四種JDBC的驅動程式類型,如果你決定使用JDBC,你需要正確地選擇最適合你需求的那種類型。你將使用一個DriverManager類別來處理基於驅動程式的連線。
你可以使用一個名為getConnection的DriverManager方法來建立你的資料庫連線。你也可以使用它的URL參數來辨識資料庫:
public static Connection getConnection(jdbc:odbc:nameOfDatabase)
現在,告訴DriverManager有關驅動程式的資訊(應該在你的classpath):
Class.forName(“sun.jdbc. odbc.nameOfJDBCDriver”);
你已經將資料庫連接到JSP程序,但你仍然不能夠執行一個資料庫命令。解決這一點,你可以在JSP程式碼中產生宣告以建立資料庫指令,如下所示:
public Statement createStatement(intresultSetType, intresultSetConcurrency)
其中的參數能夠讓你控制從資料庫查詢得到的結果。當使用第一個參數時,可以在程式中看到結果;當使用第二個參數時,你可以透過查詢來更新數值(這是一個難以相信的功能,在以後的文章中值得進一步討論)。
表A顯示列舉了下兩種方法的複雜性。
聲明(Statement)就是SQL指令。 PreparedStatement就是SQL的聲明,你可以透過其中的參數來控製程式的過程。 CallableStatement是用於存取SQL儲存程式。你是否開始意識到,如果你沒有看到這些說明,你是否覺得這些聲明很複雜?請注意到,透過呼叫rollback方法,你可以撤除交易過程。
如果你想完全使用這些資料庫存取的方法,你唯一遺漏的是:
ResultSetexecuteQuery(string sqlQuery)
(你可以使用executeQuery來完成以上程序。你也可以使用一個executeUpdate來完成更新、插入和刪除)。你以上的聲明介面使你可以使用一些方法來執行SQL聲明。 ResultSet所做的就是存取從查詢得到的數據,所以你可以在JSP程式中使用這些數據。
透過將JSP程式分解成單一的、功能明顯的頁面,以及在任何給定頁面中執行一個單一的資料庫操作,可以很大程度上地簡化你的資料庫操作,以及建立可以用於以後程式開發的頁面,即使你將SQL嵌入到這些頁面的JDBC中。
但是你還可以做更多的事情,以使得你的JSP資料庫存取更加整潔和容易維護。在JSP程式碼中嵌入JDBC,以及透過發送SQL指令與資料庫通訊,這些過程都很好。但是,它要求在不能增加程式碼複雜度下,建立通過介面的SQL命令的程式。當你的SQL處理需要提高彈性的時候,你可以進一步地分離你的資料庫介面程式碼,以清潔你的JSP程式。在下面的文章中,我將告訴你如何實現這些過程。