dbErrorReporting.html   [plain text]


<?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>Error Reporting Functions</title>
    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.62.4" />
    <link rel="home" href="index.html" title="Getting Started with Berkeley DB" />
    <link rel="up" href="DB.html" title="Chapter 2. Databases" />
    <link rel="previous" href="CoreDBAdmin.html" title="Administrative Methods" />
    <link rel="next" href="CoreEnvUsage.html" title="Managing Databases in Environments" />
  </head>
  <body>
    <div class="navheader">
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">Error Reporting Functions</th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="CoreDBAdmin.html">Prev</a> </td>
          <th width="60%" align="center">Chapter 2. Databases</th>
          <td width="20%" align="right"> <a accesskey="n" href="CoreEnvUsage.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="dbErrorReporting"></a>Error Reporting Functions</h2>
          </div>
        </div>
        <div></div>
      </div>
      <p>
        To simplify error reporting and handling, the
        
        <span><tt class="classname">Db</tt> class</span>
        
        offers several useful methods. 
        
        
        

    </p>
      <div class="itemizedlist">
        <ul type="disc">
          <li>
            <p>
                <tt class="methodname">set_error_stream()</tt>
                
            </p>
            <p>
                Sets the 
                    <span>C++ <tt class="classname">ostream</tt></span>
                    
                to be used for displaying error messages issued by the DB library. 
            </p>
          </li>
          <li>
            <p>
                <tt class="methodname">set_errcall()</tt>
                
            </p>
            <p>
                Defines the function that is called when an error message is
                issued by DB. The error prefix and message are passed to
                this callback. It is up to the application to display this
                information correctly.
            </p>
          </li>
          <li>
            <p>
                <tt class="methodname">set_errfile()</tt>
            </p>
            <p>
                Sets the C library <tt class="literal">FILE *</tt> to be used for
                displaying error messages issued by the DB library. 
            </p>
          </li>
          <li>
            <p>
                <tt class="methodname">set_errpfx()</tt>
                
            </p>
            <p>
                Sets the prefix used for any error messages issued by the
                DB library.
            </p>
          </li>
          <li>
            <p>
                <tt class="methodname">err()</tt>
            </p>
            <p>
                Issues an error message. The error message is sent to the 
                callback function as defined by <tt class="methodname">set_errcall</tt>. 
                If that method has not been used, then the error message is sent to the 
                file defined by 
                    
                    <span>
                        <tt class="methodname">set_errfile()</tt> or <tt class="methodname">set_error_stream()</tt>.
                    </span>
                If none of these methods have been used, then the error message is sent to
                standard error.
            </p>
            <p>
                The error message consists of the prefix string
                (as defined by <tt class="methodname">set_errpfx()</tt>), 
                an optional <tt class="literal">printf</tt>-style formatted message, 
                the error message, and a trailing newline.
            </p>
          </li>
          <li>
            <p>
                <tt class="methodname">errx()</tt>
            </p>
            <p>
                Behaves identically to <tt class="methodname">err()</tt> except
                that the DB message text associated with the supplied error
                value is not appended to the error string.
            </p>
          </li>
        </ul>
      </div>
      <p>
        In addition, you can use the <tt class="methodname">db_strerror()</tt>
        function to directly return the error string that corresponds to a
        particular error number.
     </p>
      <p>
        For example, to send all error messages for a given database handle 
		to a callback for handling, first create your callback. Do something like this:
     </p>
      <a id="c_db8"></a>
      <pre class="programlisting">/* 
 * Function called to handle any database error messages
 * issued by DB. 
 */
void
my_error_handler(const char *error_prefix, char *msg)
{
  /* 
   * Put your code to handle the error prefix and error
   * message here. Note that one or both of these parameters
   * may be NULL depending on how the error message is issued
   * and how the DB handle is configured.
   */
} </pre>
      <p>
		And then register the callback as follows:
	</p>
      <a id="cxx_db9"></a>
      <pre class="programlisting">#include &lt;db_cxx.h&gt;
...

Db db(NULL, 0);
std::string dbFileName("my_db.db");

try
{
    // Set up error handling for this database
    db.set_errcall(my_error_handler);
    db.set_errpfx("my_example_program"); </pre>
      <p>
        And to issue an error message:
    </p>
      <a id="cxx_db10"></a>
      <pre class="programlisting">    // Open the database
    db.open(NULL, dbFileName.c_str(), NULL, DB_BTREE, DB_CREATE, 0);
}
    // Must catch both DbException and std::exception
    catch(DbException &amp;e)
    {
        db.err(e.get_errno(), "Database open failed %s", 
            dbFileName.c_str());
        throw e;
    }
    catch(std::exception &amp;e)
    {
        // No DB error number available, so use errx
        db.errx("Error opening database: %s", e.what());
        throw e;
    } </pre>
      <span>
        
    </span>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="CoreDBAdmin.html">Prev</a> </td>
          <td width="20%" align="center">
            <a accesskey="u" href="DB.html">Up</a>
          </td>
          <td width="40%" align="right"> <a accesskey="n" href="CoreEnvUsage.html">Next</a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">Administrative Methods </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top"> Managing Databases in Environments</td>
        </tr>
      </table>
    </div>
  </body>
</html>