libdb/docs/gsg_txn/CXX/txncursor.html
2012-11-14 16:35:20 -05:00

128 lines
4.7 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Transactional Cursors</title>
<link rel="stylesheet" href="gettingStarted.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
<link rel="start" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
<link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
<link rel="prev" href="nestedtxn.html" title="Nested Transactions" />
<link rel="next" href="txnindices.html" title="Secondary Indices with Transaction Applications" />
</head>
<body>
<div xmlns="" class="navheader">
<div class="libver">
<p>Library Version 11.2.5.3</p>
</div>
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">Transactional Cursors</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="nestedtxn.html">Prev</a> </td>
<th width="60%" align="center">Chapter 3. Transaction Basics</th>
<td width="20%" align="right"> <a accesskey="n" href="txnindices.html">Next</a></td>
</tr>
</table>
<hr />
</div>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a id="txncursor"></a>Transactional Cursors</h2>
</div>
</div>
</div>
<p>
You can transaction-protect your cursor operations by
specifying a transaction handle at the time that you create
your cursor. Beyond that, you do not ever
provide a transaction handle directly to a cursor method.
</p>
<p>
Note that if you transaction-protect a cursor, then you must
make sure that the cursor is closed before you either commit or
abort the transaction. For example:
</p>
<pre class="programlisting">#include "db_cxx.h"
...
int main(void)
{
// Environment and database opens omitted
...
DbTxn *txn = NULL;
Dbc *cursorp = NULL;
try {
Dbt key, data;
key.set_data(keystr);
key.set_size((strlen(keystr) + 1) * sizeof(char));
key.set_data(datastr);
key.set_size((strlen(datastr) + 1) * sizeof(char));
DbTxn *txn = NULL;
myEnv.txn_begin(NULL, &amp;txn, 0);
try {
// Get our cursor. Note that we pass the transaction handle
// here.
db.cursor(txn, &amp;cursorp, 0);
// Perform our operations. Note that we do not pass a
// transaction handle here.
char *replacementString = "new string";
while (cursor-&gt;get(&amp;key, &amp;data, DB_NEXT) == 0) {
data.set_data(void *)replacementString);
data.set_size((strlen(replacementString) + 1) *
sizeof(char));
cursor-&gt;put(&amp;key, &amp;data, DB_CURRENT);
}
// We're done. Commit the transaction.
cursor-&gt;close();
txn-&gt;commit(0);
} catch (DbException &amp;e) {
std::cerr &lt;&lt; "Error in transaction: "
&lt;&lt; e.what() &lt;&lt; std::endl;
cursor-&gt;close();
txn-&gt;abort();
}
} catch(DbException &amp;e) {
std::cerr &lt;&lt; "Error opening database and environment: "
&lt;&lt; file_name &lt;&lt; ", "
&lt;&lt; envHome &lt;&lt; std::endl;
std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
}
return (EXIT_SUCCESS);
} </pre>
</div>
<div class="navfooter">
<hr />
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left"><a accesskey="p" href="nestedtxn.html">Prev</a> </td>
<td width="20%" align="center">
<a accesskey="u" href="usingtxns.html">Up</a>
</td>
<td width="40%" align="right"> <a accesskey="n" href="txnindices.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Nested Transactions </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
<td width="40%" align="right" valign="top"> Secondary Indices with Transaction Applications</td>
</tr>
</table>
</div>
</body>
</html>