JDBC 異常處理
jdbc 異常處理
異常處理,是指可以在一個(gè)受控制的方式處理異常情況,如程序定義的錯(cuò)誤。
當(dāng)異常情況發(fā)生時(shí),將引發(fā)異常,控制被重定向到適用的 catch 子句。如果沒有適用 catch 子句存在,那么程序的執(zhí)行結(jié)束。
jdbc 的異常處理非常類似于 java excpetion 處理,但對(duì)于 jdbc,最常見的異常處理的是 java.sql.sqlexception。
1. sqlexception 方法
sqlexception 對(duì)象可用于檢索有關(guān)異常的附加信息:
方法 | 描述 |
---|---|
geterrorcode( ) | 獲取與異常關(guān)聯(lián)的錯(cuò)誤號(hào)。 |
getmessage( ) | 獲取jdbc驅(qū)動(dòng)程序的錯(cuò)誤消息由驅(qū)動(dòng)程序處理錯(cuò)誤或獲取oracle錯(cuò)誤號(hào)和消息的一個(gè)數(shù)據(jù)庫(kù)錯(cuò)誤。 |
getsqlstate( ) | 獲取xopen sqlstate字符串。對(duì)于jdbc驅(qū)動(dòng)程序的錯(cuò)誤,沒有有用的信息從該方法返回。對(duì)于一個(gè)數(shù)據(jù)庫(kù)錯(cuò)誤,則返回五位xopen sqlstate代碼。這種方法可以返回null。 |
getnextexception() | 獲取異常鏈的下一個(gè)exception對(duì)象。 |
printstacktrace( ) | 打印當(dāng)前的異常,或者拋出,其回溯到標(biāo)準(zhǔn)錯(cuò)誤流。 |
printstacktrace(printstream s) | 打印此拋出,其回溯到指定的打印流。 |
printstacktrace(printwriter w) | 打印此拋出,其回溯到指定的打印寫入。 |
2. jdbc 異常處理方法
利用可從 exception 對(duì)象捕獲異常的信息,并適當(dāng)?shù)乩^續(xù)運(yùn)行程序。
這里是一個(gè) try塊的一般形式為:
try { // your risky code goes between these curly braces!!! } catch(exception ex) { // your exception handling code goes between these // curly braces, similar to the exception clause // in a pl/sql block. } finally { // your must-always-be-executed code goes between these // curly braces. like closing database connection. }
例如:
/step 1. import required packages import java.sql.*; public class jdbcexample { // jdbc driver name and database url static final string jdbc_driver = "com.mysql.jdbc.driver"; static final string db_url = "jdbc:mysql://localhost/emp"; // database credentials static final string user = "username"; static final string pass = "password"; public static void main(string[] args) { connection conn = null; try{ //step 2: register jdbc driver class.forname("com.mysql.jdbc.driver"); //step 3: open a connection system.out.println("connecting to database..."); conn = drivermanager.getconnection(db_url,user,pass); //step 4: execute a query system.out.println("creating statement..."); statement stmt = conn.createstatement(); string sql; sql = "select id, first, last, age from employees"; resultset rs = stmt.executequery(sql); //step 5: extract data from result set while(rs.next()){ //retrieve by column name int id = rs.getint("id"); int age = rs.getint("age"); string first = rs.getstring("first"); string last = rs.getstring("last"); //display values system.out.print("id: " + id); system.out.print(", age: " + age); system.out.print(", first: " + first); system.out.println(", last: " + last); } //step 6: clean-up environment rs.close(); stmt.close(); conn.close(); }catch(sqlexception se){ //handle errors for jdbc se.printstacktrace(); }catch(exception e){ //handle errors for class.forname e.printstacktrace(); }finally{ //finally block used to close resources try{ if(conn!=null) conn.close(); }catch(sqlexception se){ se.printstacktrace(); }//end finally try }//end try system.out.println("goodbye!"); }//end main }//end jdbcexample
現(xiàn)在讓我們來(lái)編譯上面的例子如下:
c:>javac jdbcexample.java c:>
當(dāng)運(yùn)行jdbcexample,如果沒有問題它會(huì)產(chǎn)生以下結(jié)果,否則相應(yīng)的錯(cuò)誤將被捕獲并會(huì)顯示錯(cuò)誤消息:
c:>java jdbcexample connecting to database... creating statement... id: 100, age: 18, first: zara, last: ali id: 101, age: 25, first: mahnaz, last: fatma id: 102, age: 30, first: zaid, last: khan id: 103, age: 28, first: sumit, last: mittal c:>
試試上面的例子中通過(guò)傳遞錯(cuò)誤的數(shù)據(jù)庫(kù)名稱或錯(cuò)誤的用戶名或密碼,并檢查結(jié)果。
相關(guān)文章
- JDBC 教程
- JDBC 驅(qū)動(dòng)類型
- JDBC 連接數(shù)據(jù)庫(kù)范例
- JDBC 連接數(shù)據(jù)庫(kù)步驟
- JDBC Statement, PreparedStatement 和 CallableStatement
- JDBC ResultSet 結(jié)果集
- JDBC Resultset 結(jié)果集范例
- JDBC 事務(wù)保存點(diǎn)范例
- Scala 教程
- Scala 簡(jiǎn)介
- Scala 類和對(duì)象
- Scala 文件 I/O
- Spring 教程
- Spring 模塊
- Spring 依賴注入
- Spring 自動(dòng)裝配
- Spring MVC教程
- Spring MVC表單標(biāo)簽庫(kù)
- Spring security