jdbc連接各數據庫及事務處理

jdbc連接各數據庫及事務處理:

下面羅列了各種數據庫使用JDBC連接的方式:

1、Oracle8/8i/9i數據庫(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl爲數據庫的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);

2、DB2數據庫
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample"; //sample爲你的數據庫名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);

3、Sql Server7.0/2000數據庫
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb爲數據庫
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);

4、Sybase數據庫
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";//myDB爲你的數據庫名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);

 

5、Informix數據庫
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword"; //myDB爲數據庫名
Connection conn= DriverManager.getConnection(url);

6、MySQL數據庫
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
 //myDB爲數據庫名
Connection conn= DriverManager.getConnection(url);

7、PostgreSQL數據庫
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB" //myDB爲數據庫名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);

 

8、access數據庫直連用ODBC的
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");
 Connection conn = DriverManager.getConnection(url,"","");
Statement stmtNew=conn.createStatement() ;

Java中的事務處理

  一般情況下,J2EE應用服務器支持JDBC事務、JTA(Java Transaction API)事務、容器管理事務。一般情況下,最好不要在程序中同時使用上述三種事務類型,比如在JTA事務中嵌套JDBC事務。第二方面,事務要在儘可能短的時間內完成,不要在不同方法中實現事務的使用。下面我們列舉兩種事務處理方式。
 
  1、JavaBean中使用JDBC方式進行事務處理

  在JDBC中怎樣將多個SQL語句組合成一個事務呢?在JDBC中,打開一個連接對象Connection時,缺省是auto-commit模式,每個SQL語句都被當作一個事務,即每次執行一個語句,都會自動的得到事務確認。爲了能將多個SQL語句組合成一個事務,要將auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之後,如果不調用commit()方法,SQL語句不會得到事務確認。在最近一次commit()方法調用之後的所有SQL會在方法commit()調用時得到確認。

 

public int delete(int sID) { 
 dbc = new DataBaseConnection(); 
 Connection con = dbc.getConnection(); 
 try { 
  con.setAutoCommit(false);// 更改JDBC事務的默認提交方式 
  dbc.executeUpdate("delete from bylaw where ID=" + sID); 
  dbc.executeUpdate("delete from bylaw _content where ID=" + sID); 
  dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID); 
  con.commit();//提交JDBC事務 
  con.setAutoCommit(true);// 恢復JDBC事務的默認提交方式 
  dbc.close(); 
  return 1; 
 } 
 catch (Exception exc) { 
  con.rollBack();//回滾JDBC事務 
  exc.printStackTrace(); 
  dbc.close(); 
  return -1; 
 } 
} 

 

2、SessionBean中的JTA事務

  JTA 是事務服務的 J2EE 解決方案。本質上,它是描述事務接口(比如 UserTransaction 接口,開發人員直接使用該接口或者通過 J2EE 容器使用該接口來確保業務邏輯能夠可靠地運行)的 J2EE 模型的一部分。JTA 具有的三個主要的接口分別是 UserTransaction 接口、TransactionManager 接口和 Transaction 接口。這些接口共享公共的事務操作,例如 commit() 和 rollback(), 但是也包含特殊的事務操作,例如 suspend(),resume() 和 enlist(),它們只出現在特定的接口上,以便在實現中允許一定程度的訪問控制。例如,UserTransaction 能夠執行事務劃分和基本的事務操作,而 TransactionManager 能夠執行上下文管理。
 
  應用程序可以調用UserTransaction.begin()方法開始一個事務,該事務與應用程序正在其中運行的當前線程相關聯。底層的事務管理器實際處理線程與事務之間的關聯。UserTransaction.commit()方法終止與當前線程關聯的事務。 UserTransaction.rollback()方法將放棄與當前線程關聯的當前事務。

public int delete(int sID) { 
 DataBaseConnection dbc = null; 
 dbc = new DataBaseConnection(); 
 dbc.getConnection(); 
 UserTransaction transaction = sessionContext.getUserTransaction();//獲得JTA事務 
 try { 
  transaction.begin(); //開始JTA事務 
  dbc.executeUpdate("delete from bylaw where ID=" + sID); 
  dbc.executeUpdate("delete from bylaw _content where ID=" + sID); 
  dbc.executeUpdate("delete from bylaw _affix where bylawid=" + sID); 
  transaction.commit(); //提交JTA事務 
  dbc.close(); 
  return 1; 
 } 
 catch (Exception exc) { 
  try { 
   transaction.rollback();//JTA事務回滾 
  } 
  catch (Exception ex) { 
   //JTA事務回滾出錯處理 
   ex.printStackTrace(); 
  } 
  exc.printStackTrace(); 
  dbc.close(); 
  return -1; 
 } 
} 
 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章