Documentation Home
X DevAPI User Guide
Download this Manual
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


X DevAPI User Guide  /  ...  /  Error Handling

8.1.2 Error Handling

When writing scripts for MySQL Shell you can often simply rely on the exception handling done by MySQL Shell. For all other languages either proper exception handling is required to catch errors or the traditional error handling pattern needs to be used if the language does not support exceptions.

The default error handling can be changed by creating a custom SessionContext and passing it to the mysqlx.getSession() function. This enables switching from exceptions to result based error checking.

The following example shows how to perform proper error handling. The example assumes that the test schema exists and that the collection my_collection exists.

MySQL Shell JavaScript Code

Press CTRL+C to copy
var mysqlx = require('mysqlx'); var mySession; try { // Connect to server on localhost mySession = mysqlx.getSession( { host: 'localhost', port: 33060, user: 'user', password: 'password' } ); } catch (err) { print('The database session could not be opened: ' + err.message); } try { var myDb = mySession.getSchema('test'); // Use the collection 'my_collection' var myColl = myDb.getCollection('my_collection'); // Find a document var myDoc = myColl.find('name like :param').limit(1) .bind('param','L%').execute(); // Print document print(myDoc.first()); } catch (err) { print('The following error occurred: ' + err.message); } finally { // Close the session in any case mySession.close(); }

MySQL Shell Python Code

Press CTRL+C to copy
from mysqlsh import mysqlx mySession try: # Connect to server on localhost mySession = mysqlx.get_session( { 'host': 'localhost', 'port': 33060, 'user': 'user', 'password': 'password' } ) except Exception as err: print('The database session could not be opened: %s' % str(err)) try: myDb = mySession.get_schema('test') # Use the collection 'my_collection' myColl = myDb.get_collection('my_collection') # Find a document myDoc = myColl.find('name like :param').limit(1).bind('param','L%').execute() # Print document print(myDoc.first()) except Exception as err: print('The following error occurred: %s' % str(err)) finally: # Close the session in any case mySession.close()

Node.js JavaScript Code

Press CTRL+C to copy
var mysqlx = require('@mysql/xdevapi'); // Connect to server on localhost mysqlx .getSession({ host: 'localhost', port: 33060, user: 'user', password: 'password' }) .then(function (mySession) { // This can't throw an error as we check existence at a later operation only var myDb = mySession.getSchema('test'); // Use the collection 'my_collection' // This can't throw an error as we check existence at a later operation only var myColl = myDb.getCollection('my_collection'); // Find a document return myColl .find('name like :param') .limit(1) .bind('param','L%') .execute(function (row) { console.log(row); }) .then(function () { return session.close(); }) .catch(function (err) { console.log('The following error occurred: ' + err.message); }); }) .catch (err) { console.log('The database session could not be opened: ' + err.message); });

C# Code

Press CTRL+C to copy
Session mySession = null; try { // Connect to server on localhost mySession = MySQLX.GetSession("mysqlx://user:password@localhost:33060"); try { Schema myDb = mySession.GetSchema("test"); // Use the collection 'my_collection' Collection myColl = myDb.GetCollection("my_collection"); // Find a document DocResult myDoc = myColl.Find("name like :param").Limit(1).Bind("param", "L%").Execute(); // Print document Console.WriteLine(myDoc.FetchOne()); } catch (Exception err) { Console.WriteLine("The following error occurred: " + err.Message); } finally { // Close the session in any case mySession.Close(); } } catch (Exception err) { Console.WriteLine("The database session could not be opened: " + err.Message); }

Python Code

Press CTRL+C to copy
import mysqlx # Connect to server my_session = mysqlx.get_session({ 'host': 'localhost', 'port': 33060, 'user': 'user', 'password': 'password' }) # Get the Schema test my_schema = my_session.get_schema('test') # Create a new collection my_coll = my_schema.create_collection('my_collection') # Start a transaction my_session.start_transaction() try: my_coll.add({'name': 'Rohit', 'age': 18, 'height': 1.76}).execute() my_coll.add({'name': 'Misaki', 'age': 24, 'height': 1.65}).execute() my_coll.add({'name': 'Leon', 'age': 39, 'height': 1.9}).execute() # Commit the transaction if everything went well result = my_session.commit() # handle warnings if result.get_warnings_count() > 0: for warning in result.get_warnings(): print('Type [{0}] (Code {1}): {2}'.format(warning['level'], warning['code'], warning['msg'])) print('Data inserted successfully.') except Exception as err: # Rollback the transaction in case of an error my_session.rollback() # handle warnings if reply.get_warnings_count() > 0: for warning in result.get_warnings(): print('Type [{0}] (Code {1}): {2}'.format(warning['level'], warning['code'], warning['msg'])) # Printing the error message print('Data could not be inserted: {0}'.format(err))

Java Code

Press CTRL+C to copy
import com.mysql.cj.xdevapi.*; Session mySession; try { // Connect to server on localhost mySession = new SessionFactory().getSession("mysqlx://localhost:33060/test?user=user&password=password"); try { Schema myDb = mySession.getSchema("test"); // Use the collection 'my_collection' Collection myColl = myDb.getCollection("my_collection"); // Find a document DocResult myDoc = myColl.find("name like :param").limit(1).bind("param", "L%").execute(); // Print document System.out.println(myDoc.fetchOne()); } catch (XDevAPIError err) { // special exception class for server errors System.err.println("The following error occurred: " + err.getMessage()); } finally { // Close the session in any case mySession.close(); } } catch (Exception err) { System.err.println("The database session could not be opened: " + err.getMessage()); }

C++ Code

Press CTRL+C to copy
#include <mysqlx/xdevapi.h> try { // Connect to server on localhost Session session(33060, "user", "password"); try { Schema db = session.getSchema("test"); // Use the collection 'my_collection' Collection myColl = db.getCollection("my_collection"); // Find a document auto myDoc = myColl.find("name like :param").limit(1) .bind("param", "L%").execute(); // Print document cout << myDoc.fetchOne() << endl; // Exit with success code exit(0); } catch (const Error &err) { cout << "The following error occurred: " << err << endl; exit(1); } // Note: session is closed automatically when session object // is destructed. } catch (const Error &err) { cout << "The database session could not be opened: " << err << endl; // Exit with error code exit(1); }