Technical requirements

Runtime

  • Java 21 or later (JRE is enough to run BroadSQL; a JDK is only needed to build it).
  • Windows is the primary, fully supported platform. BroadSQL also runs on Linux, but Linux support currently has some known rough edges.

Databases supported out of the box

BroadSQL ships with JDBC drivers for five databases: no extra download needed:

DatabaseBundled driver version
H22.3.232
PostgreSQL42.7.13
Apache Derby (Embedded and Client)10.17.1.0
HSQLDB2.7.4
SQLite3.53.2.1

H2 is also the format BroadSQL itself uses for its own connections file (the CDF, $CDF), and one of the destination kinds the PULL command can write to (see below).

Adding another database type

BroadSQL can connect to any JDBC-compliant database (not just the five above) through the generic connection path it uses for everything that isn't Derby or H2. Two things are needed to add one:

  1. The driver itself. Drop the vendor's JDBC .jar into the drivers/ folder (or lib/) next to the BroadSQL installation. SHOW DRIVERS; scans both folders and lists every JDBC driver it finds there (name, version, vendor; add DETAILED for the JAR path and driver class name(s)).
  2. A TYPE entry in the CDF. The ADD CONNECTION wizard's "Type" prompt, and the "Type" dropdown in the CONFIG GUI, only ever offer values already present in the CDF's TYPE table: typing or selecting anything else is rejected. Connect to the CDF (CONNECT $CDF;) and insert a row for the new type, for example:

```sql INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('MariaDB', 'org.mariadb.jdbc.Driver', '30'); ```

Once that row exists, MariaDB appears in the Type prompt/dropdown for every connection created from then on.

Out of the box, the CDF's TYPE table has only four rows:

ID (type name)DRIVER
Oracle(none)
Derbyorg.apache.derby.jdbc.EmbeddedDriver
H2org.h2.Driver
MySQLcom.mysql.cj.jdbc.Driver

This means:

  • Of the five bundled drivers, only Derby and H2 are immediately selectable as a connection type. PostgreSQL, HSQLDB, and SQLite already have their driver installed but are not pre-registered as a type: step 2 above is still required before you can create a connection to one of them, even though step 1 is already done. The exact rows to add for those three:

```sql INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('PostgreSQL', 'org.postgresql.Driver', '30'); INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('HSQL', 'org.hsqldb.jdbc.JDBCDriver', '30'); INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('SQLite', 'org.sqlite.JDBC', '30'); ```

  • Oracle and MySQL are pre-registered as type names (with a default driver class name already filled in for MySQL), but neither driver is bundled: step 1 is still required for those.
  • Any other database type (MariaDB, SQL Server, DB2, Sybase, Informix, Firebird, or anything else your JDBC driver supports) needs both steps before you can add a connection to it.

Example TYPE rows for other common databases

None of the databases below ship with BroadSQL: for each one, download the vendor's JDBC driver yourself, drop the .jar into drivers/, and insert the matching row. DRIVER is the driver's main class name; check the jar's own documentation if a newer driver renames it.

INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('Oracle',            'oracle.jdbc.OracleDriver', '30');
INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('MariaDB',           'org.mariadb.jdbc.Driver', '30');
INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('SQL Server',        'com.microsoft.sqlserver.jdbc.SQLServerDriver', '30');
INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('DB2',               'com.ibm.db2.jcc.DB2Driver', '30');
INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('DB2 IBM i',         'com.ibm.as400.access.AS400JDBCDriver', '30');
INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('Informix',          'com.informix.jdbc.IfxDriver', '30');
INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('Firebird',          'org.firebirdsql.jdbc.FBDriver', '30');
INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('MySQL',             'com.mysql.cj.jdbc.Driver', '30');
INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('SAP ASE',           'com.sybase.jdbc42.jdbc.SybDriver', '30');
INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('SAP HANA',          'com.sap.db.jdbc.Driver', '30');
INSERT INTO TYPE (ID, DRIVER, STATUS_ID) VALUES ('Teradata',          'com.teradata.jdbc.TeraDriver', '30');

Oracle and MySQL are already pre-registered out of the box (see above): the rows above are only needed if you have removed or renamed those default rows. InterSystems IRIS is not included here: its driver class name depends on which IRIS driver generation you target, so check the driver you download rather than assume a class name.

Behavior that differs by database type

A handful of commands and internal checks are implemented only for specific database types rather than through a generic, driver-agnostic mechanism:

  • CHANGE PASSWORD only knows the password-change syntax for Oracle, MySQL, PostgreSQL, H2, and HSQL. It reports "Operation not supported" for every other connected database type, regardless of whether that database has its own equivalent SQL statement.
  • LINK TABLE only works when the target connection is H2: it relies on H2's own CREATE LINKED TABLE statement, which has no equivalent in most other databases.
  • Rollback of DDL statements (CREATE/ALTER/DROP/TRUNCATE) after an uncommitted change is handled correctly for a known list of database types (Derby, SQLite, PostgreSQL, SQL Server, Sybase, DB2, Informix, Firebird; databases where DDL does not force an implicit commit) and for Oracle/H2/HSQL (which BroadSQL can query directly for pending uncommitted transactions). For any other database type, BroadSQL falls back to tracking uncommitted-transaction state internally, which is less precise than asking the database directly. Note: a Derby connection created from the default TYPE row above does not currently match this list's internal "Derby" check (a naming inconsistency between the default row and the code, tracked internally): it falls back to the same generic handling as an unlisted database type until that's addressed.

None of this affects ordinary SELECT/INSERT/UPDATE/DELETE/DDL statements, table/column browsing (DESCR, SHOW TABLES, etc.), or export (EXPORT/DUMP): those work the same way regardless of database type, for any database reachable through a registered connection.

PULL (export to H2, a spreadsheet, or a text file)

PULL can read from any currently connected database type: there is no restriction on the source. Its destination is a local H2 database (AS H2), a tab of an Excel/ODS spreadsheet (AS XLSX/AS ODS), or a whole CSV/TXT file (AS CSV/AS TXT).

Regardless of destination, only "ordinary business data" column types can be pulled: text, integers, decimals, floating point, boolean, and date/time/timestamp columns. Large objects (BLOB/CLOB/ NCLOB), binary data, and structural or vendor-specific types (arrays, structs, XML, etc.) are rejected with an explicit error rather than silently dropped or corrupted: see PULL for the full command reference.

Full list of recognized database type names

BroadSQL's code recognizes the following type names. "Bundled driver" and "pre-registered in the CDF" are independent of each other, as explained above.

Type nameBundled driverPre-registered in a fresh CDFType-specific behavior implemented
H2YesYesCDF format itself; PULL destination; password/DDL/uncommitted handling
Derby (Embedded / Client)YesYes (Embedded)DDL-rollback handling; dedicated log file redirection
PostgreSQLYesNoDDL-rollback handling; CHANGE PASSWORD
HSQLDBYesNoCHANGE PASSWORD; uncommitted-transaction check
SQLiteYesNoDDL-rollback handling
MySQLNoYesCHANGE PASSWORD
OracleNoYesCHANGE PASSWORD; version display; uncommitted-transaction check
MariaDBNoNonone: generic path only
SQL ServerNoNoDDL-rollback handling only
DB2NoNoDDL-rollback handling only
SybaseNoNoDDL-rollback handling only
InformixNoNoDDL-rollback handling only
FirebirdNoNoDDL-rollback handling only
TeradataNoNonone
IntersysNoNonone
JDBC-ODBC BridgeNoNonone (this bridge was removed from the JDK itself in Java 8)
InstantDBNoNonone
IDS ServerNoNonone
CloudscapeNoNonone
PointbaseNoNonone

A database type not in this list can still be used (the generic connection path does not check the type name against anything), but you will not get any of the type-specific behavior above, and you must still add its driver and register a TYPE row as described earlier.