###

Berkeley DB Reference Guide:
  Access Methods

# Error support

Berkeley DB offers programmatic support for displaying error return values.

The db_strerror interface returns a pointer to the error message corresponding to any Berkeley DB error return, similar to the ANSI C strerror interface, but is able to handle both system error returns and Berkeley DB specific return values.

For example:

>     int ret;
>     if ((ret = dbp->put(dbp, NULL, &key, &data, 0)) != 0) {
>     	fprintf(stderr, "put failed: %s\n", db_strerror(ret));
>     	return (1);
>     }

There are also two additional error interfaces, DB->err and DB->errx. These interfaces work like the ANSI C X3.159-1989 (ANSI C) printf interface, taking a printf-style format string and argument list, and writing a message constructed from the format string and arguments.

The DB->err function appends the standard error string to the constructed message, the DB->errx function does not. These interfaces provide simpler ways of displaying Berkeley DB error messages. For example, if your application tracks session IDs in a variable called session_id, it can include that information in its error messages:

Error messages can additionally be configured to always include a prefix (e.g., the program name) using the DB->set_errpfx interface.

>     #define DATABASE "access.db"
>     int ret;
>     dbp->errpfx(dbp, argv0);
>     if ((ret =
>     	dbp->open(dbp, DATABASE, DB_BTREE, DB_CREATE, 0664)) != 0) {
>     	dbp->err(dbp, ret, "%s", DATABASE);
>     	dbp->errx(dbp,
>     		"contact your system administrator: session ID was %d",
>         		session_id);
>     	return (1);
>     }

For example, if the program was called my_app, and the open call returned an EACCESS system error, the error messages shown would appear as follows:

>     my_app: access.db: Permission denied.
>     my_app: contact your system administrator: session ID was 14

Copyright Sleepycat Software