Simba Technologies
Simba Technologies

SimbaEngine X SDK 10.1.11
Developing Drivers for SQL-Capable Data Stores

Applications create SQL queries and send them to the ODBC driver. The SimbaODBC component implements low-level requirements of the ODBC API, plus  session and statement management and error checking. Write your DSI implementation to connect directly to your specific data store.

Introducing the SimbaEngine X SDK

The Simba Engine X Software Development Kit (SDK) is a collection of database access tools packaged in a flexible, reusable set of components. These components are used to create custom database drivers for any data store, even if the data store is not SQL-capable. Drivers can be built to access both local and remote data stores.

This guide introduces the components of the SimbaEngine X SDK and explains how you can use them to create custom drivers for ODBC, JDBC, OLE DB and applications.


This guide explains how to build a driver for data stores that support SQL. If you want to build a driver for data stores that do not support SQL, see Developing Drivers for Data Stores Without SQL.

Creating a Custom Driver with the SimbaEngine X SDK

The components of the SimbaEngine X SDK implement all the required functionality of ODBC, JDBC, OLE DB, and, as well as handling session management, state management, data conversion, and error checking. These components provide an abstraction layer to insulate your underlying driver functionality from any changes to data access standards. By basing a custom driver on the SimbaEngine X SDK, you can leverage the experience of leaders in data connectivity.

For data stores that do not support SQL, the SimbaEngine X SDK provides an SQL parser and an execution engine to translate between SQL commands and your custom datastore API.

For data stores requiring remote deployment, the SimbaEngine X SDK allows you to re-build your existing driver into a server for a client/ server deployment. This allows you to build your driver as a server that reside near data source, then deploy an ODBC or a JDBC client that handles communication with the end user's application. For more information about client-server deployment, see the SimbaClientServer User Guide at

Data Store Interface Implementation (DSII)

To write a custom driver using the SimbaEngine X SDK, you write a component called the "DSI implementation" to access your data store. You then link this component with the SimbaEngine X SDK components, which takes care of meeting the data access standards, and optionally converting SQL commands to commands that your data store can understand. The result is a shared object: a .dylib, .jar, or .dll, .so file, depending on your development platform. Applications, such as Tableau or Microsoft Excel, use this shared object to access your data store, even if your data store is not SQL-enabled.

Example - Build an ODBC Driver for a SQL-Capable Data Store

The easiest custom ODBC driver you can build with the SimbaEngine X SDK is a standalone driver connecting to an SQL-capable data store. In this configuration, the application (such as Tableau or Excel) creates SQL queries and sends them to the ODBC driver. The ODBC driver can choose to modify these queries, then sends them to the data store. The data store executes the SQL queries and creates a result set. Finally, the ODBC driver moves the result set from the data store back to the application.

This flow of control is illustrated below:

Custom ODBC driver architecture


The SimbaEngine X SDK provides a similar solution for JDBC, OLE DB, and applications.

The following sections describe the components shown in the above diagram.

SimbaODBC Component

For data stores that are SQL-capable, your custom ODBC driver is composed of the SimbaODBC component and your DSI implementation. The SimbaODBC component implements most of the driver functionality, including:

  • session and statement management
  • abstracting and implementing the low-level requirements of the ODBC API
  • error checking


When changes are made to the ODBC API, or when applications change how they use the ODBC API, the SimbaEngine X SDK incorporates these changes transparently. As a result, drivers based on the SimbaEngine X SDK can handle these changes without code rewrites.

The Data Store Interface (DSI)

The data store interface, or DSI, defines a generic view of an SQL database that is independent of the data access standards (ODBC, JDBC, ADO.NET and OLE DB). The SimbaEngine X SDK translates the ODBC, JDBC, ADO.NET and OLE DB interfaces to the DSI in C++, Java, or C#. By writing code to map from the DSI to your data store, you are creating a driver that can use one of these standard interfaces.


  • The DSI API is object-oriented and simpler to use than the industry-standard interfaces, making it easier to translate standard APIs to your custom data store.
  • The DSI API provides a consistent API for all the standards it supports: ODBC, JDBC, ADO.NET or OLE DB. This makes creating drivers for different standards much easier, because you can re-use your knowledge.

Your DSI Implementation (DSII)

The SimbaODBC component uses the data store interface, or DSI, to communicate with the your DSI implementation. The DSI interface is common to all SimbaEngine X SDK components that communicate with customer code. You write your DSI implementation (DSII) to connect directly to your data store and translate its interface to the DSI API.


Every DSII is custom designed for a specific data store and that data store's interface.

Example - Build a Client/Server Solution

Once you have created a DSI implementation and built a custom driver, either for a SQL-enabled or non-SQL-enabled data store, you can rebuild your DSI implementation into a client/server solution. You can do this without making any changes to the code - simply link your DSI implementation to the Simba Server to provide remote data access:

Client Server architecture

The following sections describe the components shown in the above diagram.

Simba Client/Server protocol

The Simba Client/Server protocol is a network protocol that works on any network to provide remote access to a DSI implementation. Simba Server translates the Simba Client/Server protocol to the DSI API.


  • A client/server deployment lets you locate your custom driver close to the data store, while the client applications are located with your users.
  • Both the ODBC and the JDBC client can talk to the same SimbaServer. That means you can write one custom driver, built it as a server, then use it to service SQL requests from both ODBC and JDBC applications.

SimbaClient for ODBC and Simba Client for JDBC

The ODBC and JDBC clients are shared objects provided by Simba. These clients use the Simba Client/Server protocol to handle communication between the application and Simba Server.


Related Links

Simba Engine SDK Usage Scenarios

Build a Driver in 5 Days

SimbaEngine X SDK FAQ