JSP調用JDBC API訪問數據庫管理系統是通過以下五個步驟來實現的:
(1)加載特定的JDBC驅動程序
為了與特定的數據源連接,JDBC必須加載相應的驅動程序。這些驅動程序都是通過語句:Class.forName("Driver Name"); 來加載的。這里面有一個小技巧,我們可以在”Driver Name”出填入一系列的驅動程序名稱,例如:“Class.forName("sun.jdbc.odbc.JdbcOdbcDriver:oracle.jdbc.driver.OracleDriver”); 中間用冒號隔開。JSP將按照列表順序搜索驅動程序,并且加載第一個能與給定的URL相連的驅動程序。在搜索驅動程序列表時,JSP將跳過包含不可信任代碼的驅動程序,除非他與要打開的數據庫管理系統是來源于同一處.
(2)用已注冊的驅動程序建立到數據庫管理系統的連接
我們要做的第二步是用已經注冊的驅動程序建立到數據庫管理系統的連接,這要通過DriverManager類的getConncetion方法來實現。這里特別需要注意的是String類型 url 參數的取值,url代表一個將要連接的特定的數據庫管理系統的數據源。使用不同的數據庫驅動程序,url的取值方式是不同的。例程中加載了“com.mysql.jdbc.Driver”驅動,url的取值方式“jdbc:mysql://localhost:3306/ums_db?useUnicode=true&characterEncoding=GB2312”,如果加載“oracle.jdbc.driver.OracleDriver”驅動,url的取值方式應該是“jdbc:oracle:thin:@host name:port number:service name”。其他驅動程序的url的取值方式,各位自行參閱相應的文擋。
例程中的GetConnection()方法只有一個參數String url,代表ODBC數據源,如果連接大型數據庫,則需要三個參數:String url、Strng user、String password。User和password代表數據庫管理系統的用戶名和口令。一般的大型數據庫如Oracle、MS SQL Server、DB2等用戶名和口令是必須的。而小型的數據庫如ACCESS、Foxpro等并不需要。
如果連接成功,則會返回一個Connection類的對象con。以后對數據庫的操作都是建立在con對象的基礎上的。GetConnection()方法是DriverManager類的靜態方法,使用時不用生成DriverManager類的對象,直接使用類名DriverManager就可以調用。
(3)創建Statement聲明,執行SQL語句
在實例化一個Connection類的對象con,成功建立一個到數據庫管理系統的連接之后。我們要做的第三步是利用該con對象生成一個Statement類的對象stmt。該對象負責將SQL語句傳遞給數據庫管理系統執行,如果SQL語句產生結果集,stmt對象還會將結果集返回給一個ResultSet類的對象。
Statement類的主要的方法有三個:
executeUpdate(String sql)
executeQuery(String sql)
execute(String sql)
executeUpdate(String sql)方法用于執行DDL類型的SQL語句,這種類型的SQL語句會對數據庫管理系統的對象進行創建、修改、刪除操作,一般不會返回結果集。
executeQuery(String sql)方法用于執行一條查詢數據庫的SELECT語句。如果有符合查詢條件的數據存在,該方法將返回一個包含相應數據的ResultSet類對象,否則,該對象的next()方法將返回false。
execute(String sql)方法用于執行一個可能返回多個結果集的存儲過程(Stored Procedure)或者一條動態生成的不知道結果集個數的SQL語句。如果存儲過程或者SQL語句產生一個結果集,該方法返回false.如果產生多個結果集,該方法返回true。我們可以綜合運用Statement類的getResultSet(), getUpdateCount(), getMoreResults()方法來檢索不同的結果集。
服務器對JSP程序進行編譯時,并不對將要執行的SQL語句作語法檢查,只是將其作為一個String對象。只有當客戶端發出HTTP請求,Java虛擬機對Servlet進行解釋執行,將SQL語句傳遞給數據庫管理系統時,才能知道他是否正確。對于錯誤的SQL語句,在執行時會產生SQLExcepion。其實,所有與JDBC操作的JSP語句都與數據庫管理系統及相應的驅動程序有關,是超出JSP的控制范圍的。這些語句只有在實際的解釋執行中才能檢驗出是否能順利執行,因此一定要聲明并捕獲例外:
try{
….
}catch(SQLException e)
{
Sytem.err.println(“SQLException:”+e.getMessage());
}
否則,JSP程序無法被編譯成Servlet。
(4)關閉Statement對象
一個Statement對象在打開后可以多次調用executeQuery(String sql)、executeUpdate(String sql)、execute(String sql)方法來執行SQL語句,與數據庫管理系統進行交互。但一個Statement對象在同一時間只能打開一個結果集,對第二個結果集的打開隱含著對第一個結果集的關閉。如果想對多個結果集同時進行操作,必須創建多個Statement對象,在每個Statement對象上執行SQL語句獲得相應的結果集。
(5)關閉Connection對象
在處理完對數據庫的操作后,一定要將Connection對象關閉,以釋放JDBC占用的系統資源。在不關閉Connection對象的前提下再次用DriverManager靜態類初始化新的Connection對象會產生系統錯誤。而一個已經建立連接的Connection對象可以同時初始化多個Statement對象。對應不同的數據庫管理系統的Connection對象可以初始化Statement對象的個數是不同的。在Oracle中是50個。
posted on 2005-10-27 12:51
rkind 閱讀(189)
評論(0) 編輯 收藏 所屬分類:
JAVA基礎&數據庫