⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tpcbexample.java

📁 介绍:MySQL是比较出名的数据库软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        Dbc tcurs = null;        DbTxn t = null;        Defrec rec = new Defrec();        Histrec hrec = new Histrec();        int account, branch, teller;        Dbt d_dbt = new Dbt();        Dbt d_histdbt = new Dbt();        Dbt k_dbt = new Dbt();        Dbt k_histdbt = new Dbt();        account = random_id(ACCOUNT, anum, bnum, tnum);        branch = random_id(BRANCH, anum, bnum, tnum);        teller = random_id(TELLER, anum, bnum, tnum);        // The history key will not actually be retrieved,        // but it does need to be set to something.        byte hist_key[] = new byte[4];	k_histdbt.set_data(hist_key);	k_histdbt.set_size(4 /* == sizeof(int)*/);        byte key_bytes[] = new byte[4];        k_dbt.set_data(key_bytes);        k_dbt.set_size(4 /* == sizeof(int)*/);        d_dbt.set_flags(Db.DB_DBT_USERMEM);        d_dbt.set_data(rec.data);        d_dbt.set_ulen(rec.length());        hrec.set_aid(account);        hrec.set_bid(branch);        hrec.set_tid(teller);        hrec.set_amount(10);        // Request 0 bytes since we're just positioning.        d_histdbt.set_flags(Db.DB_DBT_PARTIAL);        // START TIMING        try {            t = txn_begin(null, 0);            acurs = adb.cursor(t, 0);            bcurs = bdb.cursor(t, 0);            tcurs = tdb.cursor(t, 0);            hcurs = hdb.cursor(t, 0);            // Account record            k_dbt.set_recno_key_data(account);            if (acurs.get(k_dbt, d_dbt, Db.DB_SET) != 0)                throw new TpcbException("acurs get failed");            rec.set_balance(rec.get_balance() + 10);            acurs.put(k_dbt, d_dbt, Db.DB_CURRENT);            // Branch record            k_dbt.set_recno_key_data(branch);            if (bcurs.get(k_dbt, d_dbt, Db.DB_SET) != 0)                throw new TpcbException("bcurs get failed");            rec.set_balance(rec.get_balance() + 10);            bcurs.put(k_dbt, d_dbt, Db.DB_CURRENT);            // Teller record            k_dbt.set_recno_key_data(teller);            if (tcurs.get(k_dbt, d_dbt, Db.DB_SET) != 0)                throw new TpcbException("ccurs get failed");            rec.set_balance(rec.get_balance() + 10);            tcurs.put(k_dbt, d_dbt, Db.DB_CURRENT);            // History record            d_histdbt.set_flags(0);            d_histdbt.set_data(hrec.data);            d_histdbt.set_ulen(hrec.length());            if (hdb.put(t, k_histdbt, d_histdbt, Db.DB_APPEND) != 0)		throw(new DbException("put failed"));            acurs.close();            bcurs.close();            tcurs.close();            hcurs.close();            t.commit(0);            // END TIMING            return (0);        }        catch (Exception e) {            try {                if (acurs != null)                    acurs.close();                if (bcurs != null)                    bcurs.close();                if (tcurs != null)                    tcurs.close();                if (hcurs != null)                    hcurs.close();                if (t != null)                    t.abort();            }            catch (DbException dbe) {                // not much we can do here.            }            if (verbose) {                System.out.println("Transaction A=" + String.valueOf(account)                                   + " B=" + String.valueOf(branch)                                   + " T=" + String.valueOf(teller) + " failed");                System.out.println("Reason: " + e.toString());            }            return (-1);        }    }    static void errExit(Exception err, String s)    {        System.err.print(progname + ": ");        if (s != null) {            System.err.print(s + ": ");        }        System.err.println(err.toString());        System.exit(1);    }    public static void main(String argv[])    {        long seed;        int accounts, branches, tellers, history;        boolean iflag, txn_no_sync;        int mpool, ntxns;        String home, endarg;        home = "TESTDIR";        accounts = branches = history = tellers = 0;        txn_no_sync = false;        mpool = ntxns = 0;        verbose = false;        iflag = false;        seed = (new GregorianCalendar()).get(Calendar.SECOND);        for (int i = 0; i < argv.length; ++i)        {            if (argv[i].equals("-a")) {                // Number of account records                if ((accounts = Integer.parseInt(argv[++i])) <= 0)                    invarg(argv[i]);            }            else if (argv[i].equals("-b")) {                // Number of branch records                if ((branches = Integer.parseInt(argv[++i])) <= 0)                    invarg(argv[i]);            }            else if (argv[i].equals("-c")) {                // Cachesize in bytes                if ((mpool = Integer.parseInt(argv[++i])) <= 0)                    invarg(argv[i]);            }            else if (argv[i].equals("-f")) {                // Fast mode: no txn sync.                txn_no_sync = true;            }            else if (argv[i].equals("-h")) {                // DB  home.                home = argv[++i];            }            else if (argv[i].equals("-i")) {                // Initialize the test.                iflag = true;            }            else if (argv[i].equals("-n")) {                // Number of transactions                if ((ntxns = Integer.parseInt(argv[++i])) <= 0)                    invarg(argv[i]);            }            else if (argv[i].equals("-S")) {                // Random number seed.                seed = Long.parseLong(argv[++i]);                if (seed <= 0)                    invarg(argv[i]);            }            else if (argv[i].equals("-s")) {                // Number of history records                if ((history = Integer.parseInt(argv[++i])) <= 0)                    invarg(argv[i]);            }            else if (argv[i].equals("-t")) {                // Number of teller records                if ((tellers = Integer.parseInt(argv[++i])) <= 0)                    invarg(argv[i]);            }            else if (argv[i].equals("-v")) {                // Verbose option.                verbose = true;            }            else            {                usage();            }        }        rand.setSeed((int)seed);        TpcbExample app = null;        // Initialize the database environment.        // Must be done in within a try block.        //        try {            app = new TpcbExample(home, mpool, iflag,                                  txn_no_sync ? Db.DB_TXN_NOSYNC : 0);        }        catch (Exception e1) {            errExit(e1, "initializing environment failed");        }        accounts = accounts == 0 ? ACCOUNTS : accounts;        branches = branches == 0 ? BRANCHES : branches;        tellers = tellers == 0 ? TELLERS : tellers;        history = history == 0 ? HISTORY : history;        if (verbose)            System.out.println((long)accounts + " Accounts "                 + String.valueOf(branches) + " Branches "                 + String.valueOf(tellers) + " Tellers "                 + String.valueOf(history) + " History");        if (iflag) {            if (ntxns != 0)                usage();            app.populate(accounts, branches, history, tellers);        }        else {            if (ntxns == 0)                usage();            app.run(ntxns, accounts, branches, tellers);        }        // Shut down the application.        try {            app.close(0);        }        catch (DbException dbe2) {            errExit(dbe2, "appexit failed");        }        System.exit(0);    }    private static void invarg(String str)    {        System.err.println("TpcbExample: invalid argument: " + str);        System.exit(1);    }    private static void usage()    {        System.err.println(           "usage: TpcbExample [-fiv] [-a accounts] [-b branches]\n" +           "                   [-c cachesize] [-h home] [-n transactions ]\n" +           "                   [-S seed] [-s history] [-t tellers]");        System.exit(1);    }    // round 'd' to 'scale' digits, and return result as string    private String showRounded(double d, int scale)    {        return new BigDecimal(d).            setScale(scale, BigDecimal.ROUND_HALF_DOWN).toString();    }    // The byte order is our choice.    //    static long get_int_in_array(byte[] array, int offset)    {        return            ((0xff & array[offset+0]) << 0)  |            ((0xff & array[offset+1]) << 8)  |            ((0xff & array[offset+2]) << 16) |            ((0xff & array[offset+3]) << 24);    }    // Note: Value needs to be long to avoid sign extension    static void set_int_in_array(byte[] array, int offset, long value)    {        array[offset+0] = (byte)((value >> 0) & 0x0ff);        array[offset+1] = (byte)((value >> 8) & 0x0ff);        array[offset+2] = (byte)((value >> 16) & 0x0ff);        array[offset+3] = (byte)((value >> 24) & 0x0ff);    }};// Simulate the following C struct:// struct Defrec {//     u_int32_t   id;//     u_int32_t   balance;//     u_int8_t    pad[RECLEN - sizeof(int) - sizeof(int)];// };class Defrec{    public Defrec()    {        data = new byte[TpcbExample.RECLEN];    }    public int length()    {        return TpcbExample.RECLEN;    }    public long get_id()    {        return TpcbExample.get_int_in_array(data, 0);    }    public void set_id(long value)    {        TpcbExample.set_int_in_array(data, 0, value);    }    public long get_balance()    {        return TpcbExample.get_int_in_array(data, 4);    }    public void set_balance(long value)    {        TpcbExample.set_int_in_array(data, 4, value);    }    static {        Defrec d = new Defrec();        d.set_balance(500000);    }    public byte[] data;}// Simulate the following C struct:// struct Histrec {//     u_int32_t   aid;//     u_int32_t   bid;//     u_int32_t   tid;//     u_int32_t   amount;//     u_int8_t    pad[RECLEN - 4 * sizeof(u_int32_t)];// };class Histrec{    public Histrec()    {        data = new byte[TpcbExample.RECLEN];    }    public int length()    {        return TpcbExample.RECLEN;    }    public long get_aid()    {        return TpcbExample.get_int_in_array(data, 0);    }    public void set_aid(long value)    {        TpcbExample.set_int_in_array(data, 0, value);    }    public long get_bid()    {        return TpcbExample.get_int_in_array(data, 4);    }    public void set_bid(long value)    {        TpcbExample.set_int_in_array(data, 4, value);    }    public long get_tid()    {        return TpcbExample.get_int_in_array(data, 8);    }    public void set_tid(long value)    {        TpcbExample.set_int_in_array(data, 8, value);    }    public long get_amount()    {        return TpcbExample.get_int_in_array(data, 12);    }    public void set_amount(long value)    {        TpcbExample.set_int_in_array(data, 12, value);    }    public byte[] data;}class TpcbException extends Exception{    TpcbException()    {        super();    }    TpcbException(String s)    {        super(s);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -