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

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

新聞中心

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

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

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

Oracle XA 導(dǎo)入

使用 Oracle XA 功能必須導(dǎo)入以下內(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 相關(guān)的類作為子類。

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

import oracle.jdbc.xa.server.*;

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

Oracle XA 代碼示例

如下為 XA 事務(wù)的處理過程示例:

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

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

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

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

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

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

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分布式事務(wù)示例
轉(zhuǎn)載來于:http://m.5511xx.com/article/dhijiig.html