日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)OceanBase教程:OceanBase分布式事務示例

本節(jié)主要介紹如何使用 Oracle XA 功能實現(xiàn)分布式事務的示例。

創(chuàng)新互聯(lián)專注于長壽企業(yè)網(wǎng)站建設,響應式網(wǎng)站建設,購物商城網(wǎng)站建設。長壽網(wǎng)站建設公司,為長壽等地區(qū)提供建站服務。全流程按需定制制作,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務

Oracle XA 導入

使用 Oracle XA 功能必須導入以下內(nèi)容:

import oracle.jdbc.xa.OracleXid;
import oracle.jdbc.xa.OracleXAException;
import oracle.jdbc.pool.*;
import oracle.jdbc.xa.client.*;
import javax.transaction.xa.*;

oracle.jdbc.pool 軟件包具有用于連接池功能的類,并將與 XA 相關的類作為子類。

或者,如果代碼將在數(shù)據(jù)庫內(nèi)部運行并訪問該數(shù)據(jù)庫以進行 SQL 操作,則必須導入 oracle.jdbc.xa.server 而不是 oracle.jdbc.xa.client。語法如下:

import oracle.jdbc.xa.server.*;

客戶端和服務器軟件包分別具有 OracleXADataSource、OracleXAConnection 和 OracleXAResource 類的版本。 這三個類的抽象版本位于頂級 oracle.jdbc.xa 包中。

Oracle XA 代碼示例

如下為 XA 事務的處理過程示例:

  1. 使用 XA START 啟動 XA 事務,并將其置于 ACTIVE 狀態(tài)。

  2. 對于處于 ACTIVE 狀態(tài)的 XA 事務,執(zhí)行構成該事務的 SQL 語句,然后執(zhí)行 XA END 語句。XA END 使事務置于 IDLE 狀態(tài)。

  3. 對于處于 IDLE 狀態(tài)的 XA 事務,可以執(zhí)行 XA PREPARE 語句或 XA COMMIT ... ONE PHASE 語句:

    •  XA PREPARE 將事務置于 PREPARED 狀態(tài)。此時的 XA RECOVER 語句在其輸出中包括事務的 xid 值,因為 XA RECOVER 會列出所有處于 PREPARED 狀態(tài)的 XA 事務。

    • XA COMMIT ... ONE PHASE 用于預備和提交事務。由于事務終止,xid 值未由 XA RECOVER 列出。

  4. 對于處于 PREPARED 狀態(tài)的 XA 事務,可以執(zhí)行 XA COMMIT 語句來提交和終止事務,或者執(zhí)行 XA ROLLBACK 來回滾和終止事務。

public static void initClass() throws SQLException {
    createTable(tableName1, "c1 int,c2 int");
    createTable(tableName2, "c1 int,c2 int");
    createTable(tableName3, "c1 varchar(200)");
}

public void obOracleXAOne() throws Exception {
    Assume.assumeTrue(sharedUsePrepare());
    Connection conn = setConnection();
    conn.createStatement().execute(" insert into " + tableName1 + "  values(1,2)");
    JDBC4MysqlXAConnection mysqlXAConnection = new JDBC4MysqlXAConnection(
        (OceanBaseConnection) conn);
    String gtridStr = "gtrid_test_wgs_ob_oracle_xa_one";
    String bqualStr = "bqual_test_wgs_ob_oracle_xa_one";
    Xid xid = new MysqlXid(gtridStr.getBytes(), bqualStr.getBytes(), 123);
    try {
        mysqlXAConnection.start(xid, XAResource.TMNOFLAGS);
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        pstmt = conn.prepareStatement("select c1 from " + tableName1);
        rs = pstmt.executeQuery();

        while (rs.next()) {
            System.out.println(rs.getInt(1));
        }
        pstmt.close();
        pstmt = conn.prepareStatement("insert into " + tableName1 + " (c1, c2) values(?, ?)");
        pstmt.setInt(1, 12);
        pstmt.setInt(2, 12);
        pstmt.executeUpdate();
        mysqlXAConnection.end(xid, XAResource.TMSUCCESS);
        mysqlXAConnection.prepare(xid);
        mysqlXAConnection.commit(xid, false);
    } catch (Exception e) {
        e.printStackTrace();
        mysqlXAConnection.rollback(xid);
        throw e;
    }
}

public void obOracleXAOnePhase() throws Exception {
    Assume.assumeTrue(sharedUsePrepare());
    Connection conn = null;

    conn = setConnection();
    conn.createStatement().execute(" insert into " + tableName2 + "  values(1,2)");

    JDBC4MysqlXAConnection mysqlXAConnection = new JDBC4MysqlXAConnection(
        (OceanBaseConnection) conn);
    String gtridStr = "gtrid_test_wgs_ob_oracle_xa_one_phase";
    String bqualStr = "bqual_test_wgs_ob_oracle_xa_one_phase";

    Xid xid = new MysqlXid(gtridStr.getBytes(), bqualStr.getBytes(), 123);
    try {
        mysqlXAConnection.start(xid, XAResource.TMNOFLAGS);
        // ps test
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        pstmt = conn.prepareStatement("select c1 from " + tableName2 + "");
        rs = pstmt.executeQuery();

        while (rs.next()) {
            System.out.println(rs.getInt(1));
        }

        pstmt.close();

        pstmt = conn.prepareStatement("insert into " + tableName2 + " (c1, c2) values(?, ?)");
        pstmt.setInt(1, 12);
        pstmt.setInt(2, 12);
        pstmt.executeUpdate();

        mysqlXAConnection.end(xid, XAResource.TMSUCCESS);
        mysqlXAConnection.commit(xid, true);
    } catch (Exception e) {
        mysqlXAConnection.rollback(xid);
        throw e;
    }
}

文章名稱:創(chuàng)新互聯(lián)OceanBase教程:OceanBase分布式事務示例
瀏覽路徑:http://www.5511xx.com/article/dhijiig.html