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é)果。

下一節(jié):jdbc 批量處理

jdbc 教程

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频