建立一個class
package cn.com.cnpc.tz.tetd.workflow;
import java.sql.*;
import cn.com.cnpc.tz.tetd.common.Notes;
import java.sql.Connection;
public class test
{
public test()
{
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void main(String args[]) {
Connection con = null;
try {
Class.forName(Notes.DRIVER_NAME); //裝載驅動程式
con = DriverManager.getConnection(Notes.DB_URL,
"tetdmis", "tetdmis"); //獲得資料庫連接對象
con.setAutoCommit(false);
String str = "insert into tetdmis.imagetable values(1,2,null)";
Statement stmt = con.createStatement();
int d = stmt.executeUpdate(str);
System.out.println("插入了" + d + "條");
ResultSet rs = stmt.executeQuery("select * from imagetable");
while(rs.next())
{
System.out.println("====================");
}
con.commit();
String str1 = "insert into tetdmis.imagetable values(3,4,null)";
stmt.executeUpdate(str1);
String dd = null;
if (dd.equals(""))
{
System.out.println("11111111111111111111111111");
}
con.commit();
} catch (Exception e) {
e.printStackTrace();
try
{
con.rollback();
}catch(Exception ex)
{
ex.printStackTrace();
}
}
}
private void jbInit() throws Exception {
}
}
------------------------------------------------------------------------
後台列印出的:
java.lang.NullPointerException
at cn.com.cnpc.tz.tetd.workflow.test.main(test.java:38)
插入了1條
====================
分析:異常出現在
if (dd.equals(""))
{
System.out.println("11111111111111111111111111");
}
一旦這裡出現異常,它下面的con.commit()就不會執行,然後,最外面的catch就會con.rollback()
這樣第二次插入的東西就沒有插入進去
-----------------------------------------------------------------------------------------------------
怎樣理解catch與exception
method()
{
try{
try{JJ1();}catch(Exception e1){throw e1;//拋向最外面}
try{JJ2();}catch(Exception e2){throw e2;//拋向最外面}
try{JJ3();}catch(Exception e3){throw e3;//拋向最外面}
}catch(Exception e)
{ e.print(); thow e; //將會交給Exception }
}