Notes for Using C++ Driver

NuoDB C++ Namespace

The NuoDB C++ API classes are contained in the NuoDB C++ namespace. Your application can use that namespace with the following statement:

using namespace NuoDB;

ResultSet Shelf Life

A ResultSet behaves differently depending on whether the autocommit property is set on or off. If autocommit is on, you are limited to one active, valid ResultSet. Associated ResultSetMetaData objects, and ResultSet objects returned from Statement::getGeneratedKeys() can also be open at the same time but have the same "shelf life" - They are valid until closed, committed, or another statement is executed by the Statement object. A Statement that returns a ResultSet defers committing the transaction, so iteration over the ResultSet is consistent with the data and the transaction isolation level. Each execution of a Statement will commit any previously deferred transaction and so closes any associated ResultSet.

If autocommit is off, you can have as many ResultSet objects as you need, provided each ResultSet comes from a unique Statement instance. You can not have multiple open ResultSet objects from the same Statement. When a Statement is executed, any currently associated ResultSet is closed and cannot be reopened or reused in any way.

Although we do not support more than one ResultSet from the same Statement, regardless of the autocommit setting, some applications may have success accessing multiple ResultSet objects from the same Statement if the size of the ResultSet was small enough (less than 100KB) for the entire contents of the result to be returned to the client in one response message. In this case, the application can iterate over the ResultSet safely. It is not until the client has to go back to the server for more data that an error occurs. Since the entire ResultSet is already on the client, there is no error. It is not recommended, nor supported, that clients rely on this functionality.

Handling Exceptions

To handle an exception in your client application, catch SQLException. To obtain information about the exception, you can call getSqlcode() or getText() on SQLException. For example, in the case of a lost connection, getSqlcode() returns NETWORK_ERROR, which is -7. For information about error codes, see C++ Driver API Reference and search for NuoDBSqlConstants.

BatchUpdateException

As stated above, much of the NuoDB C++ driver is implemented loosely around the JDBC API. There are a few useful additions to BatchUpdateException. First of all, note that the NuoDB C++ driver, in addition to the NuoDB JDBC driver and any other NuoDB driver that supports executing statement in a batch, will continue executing commands even after the first exception is thrown. Like with JDBC, the NuoDB C++ BatchUpdateException class is derived from SQLException. It is thrown when one or more SQLException exceptions are thrown during a batch update operation. The BatchUpdateException provides the update counts for all commands that were executed successfully during the batch update. The order of elements in the array of update counts corresponds to the order in which commands were added to the batch.

After a command in a batch update fails to execute properly and a BatchUpdateException is thrown, the NuoDB C++ driver continues to process the remaining commands in the batch. The array returned by the method BatchUpdateException.getUpdateCounts() will have an element for every command in the batch rather than only elements for the commands that executed successfully before the error. In the case where the driver continues processing commands, the array element for any command that failed is NuoDB::EXECUTE_FAILED.

In addition to the array returned by getUpdateCounts(), you can also access the SQL code, SQL state and error message text from any command that was unsuccessfully executed in the batch. This is done via the getSqlcode(), getSQLState() and getText() methods which each optionally will take an index corresponding to the command that failed in the batch. If no index is specified, the SQL code, SQL state, or error message text from the first error in the batch will be returned. There is also a getTrace() method which will return the stack trace from the point where the BatchUpdateException was thrown and a getBatchCount() method that will return the number of executed (successful or failed) commands in the batch. For full documentation on the BatchUpdateException API, see the C++ Driver API Reference.

LDAP Connections

Client connections to a NuoDB database via the C++ driver will support LDAP authentication if enabled in the TE to which the client is connected. See User Authentication Using LDAP for more information.