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:
| Database | Bundled driver version |
|---|---|
| H2 | 2.3.232 |
| PostgreSQL | 42.7.13 |
| Apache Derby (Embedded and Client) | 10.17.1.0 |
| HSQLDB | 2.7.4 |
| SQLite | 3.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:
- The driver itself. Drop the vendor's JDBC
.jarinto thedrivers/folder (orlib/) next to the BroadSQL installation.SHOW DRIVERS;scans both folders and lists every JDBC driver it finds there (name, version, vendor; addDETAILEDfor the JAR path and driver class name(s)). - A
TYPEentry in the CDF. TheADD CONNECTIONwizard's "Type" prompt, and the "Type" dropdown in theCONFIGGUI, only ever offer values already present in the CDF'sTYPEtable: 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) |
Derby | org.apache.derby.jdbc.EmbeddedDriver |
H2 | org.h2.Driver |
MySQL | com.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'); ```
OracleandMySQLare pre-registered as type names (with a default driver class name already filled in forMySQL), 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 PASSWORDonly 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 TABLEonly works when the target connection is H2: it relies on H2's ownCREATE LINKED TABLEstatement, 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: aDerbyconnection created from the defaultTYPErow 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 name | Bundled driver | Pre-registered in a fresh CDF | Type-specific behavior implemented |
|---|---|---|---|
| H2 | Yes | Yes | CDF format itself; PULL destination; password/DDL/uncommitted handling |
| Derby (Embedded / Client) | Yes | Yes (Embedded) | DDL-rollback handling; dedicated log file redirection |
| PostgreSQL | Yes | No | DDL-rollback handling; CHANGE PASSWORD |
| HSQLDB | Yes | No | CHANGE PASSWORD; uncommitted-transaction check |
| SQLite | Yes | No | DDL-rollback handling |
| MySQL | No | Yes | CHANGE PASSWORD |
| Oracle | No | Yes | CHANGE PASSWORD; version display; uncommitted-transaction check |
| MariaDB | No | No | none: generic path only |
| SQL Server | No | No | DDL-rollback handling only |
| DB2 | No | No | DDL-rollback handling only |
| Sybase | No | No | DDL-rollback handling only |
| Informix | No | No | DDL-rollback handling only |
| Firebird | No | No | DDL-rollback handling only |
| Teradata | No | No | none |
| Intersys | No | No | none |
| JDBC-ODBC Bridge | No | No | none (this bridge was removed from the JDK itself in Java 8) |
| InstantDB | No | No | none |
| IDS Server | No | No | none |
| Cloudscape | No | No | none |
| Pointbase | No | No | none |
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.
BroadSQL