激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - 詳解Java的JDBC API中事務(wù)的提交和回滾

詳解Java的JDBC API中事務(wù)的提交和回滾

2020-03-13 13:44goldensun JAVA教程

這篇文章主要介紹了Java的JDBC API中事務(wù)的提交和回滾,JDBC是Java用于和數(shù)據(jù)庫(kù)軟件連接的API,需要的朋友可以參考下

如果JDBC連接是在自動(dòng)提交模式下,它在默認(rèn)情況下,那么每個(gè)SQL語(yǔ)句都是在其完成時(shí)提交到數(shù)據(jù)庫(kù)。

這可能是對(duì)簡(jiǎn)單的應(yīng)用程序,但有三個(gè)原因,你可能想關(guān)閉自動(dòng)提交和管理自己的事務(wù):

  1. 為了提高性能
  2. 為了保持業(yè)務(wù)流程的完整性
  3. 使用分布式事務(wù)

若要控制事務(wù),以及何時(shí)更改應(yīng)用到數(shù)據(jù)庫(kù)。它把單個(gè)SQL語(yǔ)句或一組SQL語(yǔ)句作為一個(gè)邏輯單元,而且如果任何語(yǔ)句失敗,整個(gè)事務(wù)失敗。

若要啟用,而不是JDBC驅(qū)動(dòng)程序默認(rèn)使用auto-commit模式手動(dòng)事務(wù)支持,使用Connection對(duì)象的的setAutoCommit()方法。如果傳遞一個(gè)布爾值false到setAutoCommit(),關(guān)閉自動(dòng)提交。可以傳遞一個(gè)布爾值true將其重新打開(kāi)。

例如,如果有一個(gè)名為conn Connection對(duì)象,以下代碼來(lái)關(guān)閉自動(dòng)提交:

?
1
conn.setAutoCommit(false);

提交和回滾
一旦已經(jīng)完成了變化,要提交更改,然后調(diào)用commit(在連接對(duì)象)方法,如下所示:

?
1
conn.commit( );

否則回滾更新對(duì)數(shù)據(jù)庫(kù)所做的使用命名連接conn,使用下面的代碼:

?
1
conn.rollback( );

下面的例子演示了如何使用一個(gè)提交和回滾對(duì)象:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
try{
  //Assume a valid connection object conn
  conn.setAutoCommit(false);
  Statement stmt = conn.createStatement();
  
  String SQL = "INSERT INTO Employees " +
        "VALUES (106, 20, 'Rita', 'Tez')";
  stmt.executeUpdate(SQL);
  //Submit a malformed SQL statement that breaks
  String SQL = "INSERTED IN Employees " +
        "VALUES (107, 22, 'Sita', 'Singh')";
  stmt.executeUpdate(SQL);
  // If there is no error.
  conn.commit();
}catch(SQLException se){
  // If there is any error.
  conn.rollback();
}

在這種情況下沒(méi)有上述INSERT語(yǔ)句會(huì)成功,一切都將被回滾。

事務(wù)提交和回滾示例
以下是使用事務(wù)提交和回滾描述的例子。

基于對(duì)環(huán)境和數(shù)據(jù)庫(kù)安裝在前面的章節(jié)中做此示例代碼已學(xué)習(xí)過(guò)。

復(fù)制過(guò)去下面的例子中JDBCExample.java,編譯并運(yùn)行,如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//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;
  Statement stmt = 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: Set auto commit as false.
   conn.setAutoCommit(false);
 
   //STEP 5: Execute a query to create statment with
   // required arguments for RS example.
   System.out.println("Creating statement...");
   stmt = conn.createStatement(
              ResultSet.TYPE_SCROLL_INSENSITIVE,
              ResultSet.CONCUR_UPDATABLE);
   
   //STEP 6: INSERT a row into Employees table
   System.out.println("Inserting one row....");
   String SQL = "INSERT INTO Employees " +
          "VALUES (106, 20, 'Rita', 'Tez')";
   stmt.executeUpdate(SQL);
 
   //STEP 7: INSERT one more row into Employees table
   SQL = "INSERT INTO Employees " +
          "VALUES (107, 22, 'Sita', 'Singh')";
   stmt.executeUpdate(SQL);
 
   //STEP 8: Commit data here.
   System.out.println("Commiting data here....");
   conn.commit();
  
  //STEP 9: Now list all the available records.
   String sql = "SELECT id, first, last, age FROM Employees";
   ResultSet rs = stmt.executeQuery(sql);
   System.out.println("List result set for reference....");
   printRs(rs);
 
   //STEP 10: Clean-up environment
   rs.close();
   stmt.close();
   conn.close();
  }catch(SQLException se){
   //Handle errors for JDBC
   se.printStackTrace();
   // If there is an error then rollback the changes.
   System.out.println("Rolling back data here....");
  try{
  if(conn!=null)
      conn.rollback();
   }catch(SQLException se2){
     se2.printStackTrace();
   }//end try
 
  }catch(Exception e){
   //Handle errors for Class.forName
   e.printStackTrace();
  }finally{
   //finally block used to close resources
   try{
     if(stmt!=null)
      stmt.close();
   }catch(SQLException se2){
   }// nothing we can do
   try{
     if(conn!=null)
      conn.close();
   }catch(SQLException se){
     se.printStackTrace();
   }//end finally try
  }//end try
  System.out.println("Goodbye!");
}//end main
 
  public static void printRs(ResultSet rs) throws SQLException{
   //Ensure we start with first row
   rs.beforeFirst();
   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);
   }
   System.out.println();
  }//end printRs()
}//end JDBCExample

現(xiàn)在讓我們來(lái)編譯上面的例子如下:

?
1
C:>javac JDBCExample.java

當(dāng)運(yùn)行JDBCExample,它會(huì)產(chǎn)生以下結(jié)果:

?
1
C:>java JDBCExample
?
1
2
3
4
5
6
7
8
9
10
11
12
Connecting to database...
Creating statement...
Inserting one row....
Commiting data here....
List result set for reference....
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
ID: 106, Age: 20, First: Rita, Last: Tez
ID: 107, Age: 22, First: Sita, Last: Singh
Goodbye!

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 黄色影视免费看 | 成人h精品动漫一区二区三区 | 黄色片网站在线免费观看 | 国产午夜精品久久久久婷 | 亚洲免费视频大全 | 成人小视频在线播放 | 91精品久久香蕉国产线看观看 | 免费在线观看毛片视频 | 羞羞视频免费网站含羞草 | 久久久久久久久久亚洲 | 久久黄色影院 | 成人在线视频免费观看 | 超污视频在线看 | 国产视频软件在线 | 国产午夜精品在线 | 91精品国产99久久久久久 | 日本在线视频免费 | 亚洲欧洲av在线 | 日韩精品 | 久久久久久91 | 欧美wwwsss9999 | 日韩精品久久久久久久电影99爱 | 日本在线一区二区 | 亚洲无av | 狠狠干夜夜草 | 午夜视频在线观看免费视频 | 欧洲成人免费 | 午夜精品网 | 精品一区二区免费视频视频 | 成人午夜亚洲 | 欧美日韩专区国产精品 | 操嫩草 | 国产成人77亚洲精品www | 国产88久久久国产精品免费二区 | 国产免费传媒av片在线 | 久久精品国产99久久6动漫亮点 | 99精品无人区乱码在线观看 | 免费播放欧美毛片 | 香蕉秀| 美女网站色免费 | 91麻豆精品国产91久久久更新资源速度超快 |