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

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java實現的mysql事務處理操作示例

Java實現的mysql事務處理操作示例

2021-05-29 11:37u013063153 Java教程

這篇文章主要介紹了Java實現的mysql事務處理操作,結合實例形式較為詳細的分析了Java基于JDBC操作mysql數據庫實現事務處理的相關概念、操作技巧與注意事項,需要的朋友可以參考下

本文實例講述了java實現的mysql事務處理操作。分享給大家供大家參考,具體如下:

1、事務是一組要么同時執行成功,要么同時執行失敗的sql語句。是數據庫操作的一個執行單元。

2、事物的四大特點:

(1)atomicity(原子性)表示一個事務內的所有操作是一個整體,要么全部成功,要么全部失敗。

(2)consistency(一致性)表示一個事物內有一個操作失敗時,所有更改過的數據都必須回滾到修改前的狀態。

(3)isolation(隔離性)事務查看數據時數據所處的狀態,要么是另一并發事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不會查看中間狀態的數據。

(4)durability(持久性)持久性事務完成之后,他對于系統的影響是永久性的。

3、實例(以sql語句中的insert語句為例)

?
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
package com.test.jdbc;
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.preparedstatement;
import java.sql.resultset;
import java.sql.sqlexception;
import java.sql.statement;
/**
 * 事務的基本用法
 *
 */
public class test {
  public static void main(string[] args) {
    connection conn = null;
    preparedstatement ps1 = null;
    preparedstatement ps2 = null;
    try {
      //加載驅動類
      class.forname("com.mysql.jdbc.driver");
      conn = drivermanager.getconnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");
      conn.setautocommit(false); //jdbc中默認是true,自動提交事務
      ps1 = conn.preparestatement("insert into t_user (username,pwd) values (?,?)");//?是占位符
      ps1.setobject(1, "張三");
      ps1.setobject(2, "666666");
      ps1.execute();
      system.out.println("插入一個用戶張三");
      try {
        thread.sleep(3000);
      } catch (interruptedexception e) {
        e.printstacktrace();
      }
      ps2 = conn.preparestatement("insert into t_user (username,pwd) values (?,?)");
      ps2.setobject(1, "李四");
      ps2.setobject(2, "123456");
      ps2.execute();
      system.out.println("插入一個用戶李四");
      conn.commit();//提交事務
    } catch (classnotfoundexception e) {
      e.printstacktrace();
      try {
        conn.rollback();//某一條數據添加失敗時,回滾
      } catch (sqlexception e1) {
        e1.printstacktrace();
      }
    } catch (sqlexception e) {
      e.printstacktrace();
    }finally{
      try {
        if(ps1!=null){
          ps1.close();
        }
      } catch (sqlexception e) {
        e.printstacktrace();
      }
      try {
        if(conn!=null){
          conn.close();
        }
      } catch (sqlexception e) {
        e.printstacktrace();
      }
    }
  }
}

這段代碼是正確的結果。運行結果:

插入一個用戶張三
(等待三秒后)
插入一個用戶李四

查看數據庫,插入了兩條數據。

接下來把數據庫中剛剛插入的兩條數據刪掉,然后把第二條sql語句改一下,讓他出錯,在第二條sql語句中去掉一個占位符:

?
1
ps2 = conn.preparestatement("insert into t_user (username,pwd) values (?)");

運行結果:

插入一個用戶張三
(等待三秒后)
拋出錯誤了。。。。。。。。

然后查看一下數據庫,發現數據庫中兩條數據都沒能添加成功

希望本文所述對大家java程序設計有所幫助。

原文鏈接:https://blog.csdn.net/u013063153/article/details/53671884

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕精品亚洲 | 51国产偷自视频区视频小蝌蚪 | 久久αv| 国产 日韩 一区 | 久久精品视频1 | 性欧美日本 | 久久久久一本一区二区青青蜜月 | 超污视频在线看 | 国产亚洲欧美日韩高清 | 欧美一区二区黄色 | 久草在线最新 | 国产精品久久久久久久av三级 | 亚洲九草 | 黄网站色成年大片免费高 | 久久久成人免费视频 | 日本不卡一区二区三区在线 | 国产色妞影院wwwxxx | 国产欧美精品综合一区 | 成人毛片100部免费观看 | 亚洲精品成人18久久久久 | 毛片电影在线看 | 国产精品一品二区三区四区18 | 成人久久久久久久久久 | 久久久免费电影 | 91 久久 | 亚洲性综合网 | 逼片 | 国产精品久久久久久久模特 | 99r国产精品 | 又黄又爽免费无遮挡在线观看 | 免费网址黄 | 国产精品久久久久久久久久妇女 | 精品成人国产在线观看男人呻吟 | 毛片在线免费播放 | 成人午夜视屏 | 国产人成精品一区二区三 | 欧美三级短视频 | 欧美视频首页 | 午夜视频久久 | 久久美女免费视频 | 亚洲人成网站在e线播放 |