DBMS Compatibility

The tables below indicate which DBMS's have successfully passed TJDO's test suite. If you've run the tests successfully against another combination of DBMS, version, platform, etc. please post your results to the SourceForge forum so we can update the list.

Note: these are the older test results. Results for the 2.2 release coming soon.

TJDO 2.1

DBMS Server Client Notes
Version Platform Version Platform
Cloudscape 4.0.6 Sun JDK 1.4.2_03
Win2K SP4
cloudscape.jar: 4.0.6 Sun JDK 1.4.2_03
Win2K SP4
This is the version bundled with J2SDKEE 1.3.1. Tested in embedded mode, although client/server mode with RmiJdbc has been known to work successfully.
5.0.9 Sun JDK 1.4.2_03
Win2K SP4
db2j.jar: 5.0.9 Sun JDK 1.4.2_03
Win2K SP4
aka DB2J
DB2 7.2.3 Sun JDK 1.4.2_03
Win2K SP4
java12/db2java.zip: 7.2.3 Sun JDK 1.4.2_03
Win2K SP4
Firebird Win2K SP4 FirebirdSQL-1.0.1.zip
Sun JDK 1.4.2_03
Win2K SP4
MySQL 4.0.15-max Win2K SP4 mysql-connector-java-3.0.9-stable-bin.jar Sun JDK 1.4.2_03
Win2K SP4
Tested only with InnoDB tables (server option --default-table-type=InnoDB). TJDO tests require database.noviewsupport=true in db.properties.
Oracle 8.1.x       Not yet retested. Win2K SP4 ojdbc14.jar: 9.2 Sun JDK 1.4.2_03
Win2K SP4
PostgreSQL 7.3.1 Red Hat Linux 7.3
Kernel 2.4.18-3
pg73jdbc2.jar: 7.3 (build 107)
pg73jdbc2ee.jar: 7.3 (build 107)
pg73jdbc3.jar: 7.3 (build 107)
Sun JDK 1.4.1
Win2K SP4
7.4.2 Red Hat Linux 7.3
Kernel 2.4.18-3
pg74.1jdbc2.jar: 7.4 (build 210)
pg74.1jdbc2ee.jar: 7.4 (build 210)
pg74.1jdbc3.jar: 7.4 (build 210)
Sun JDK 1.4.1
Win2K SP4
SAP DB 7.4.3 Build 010-120-035-462 Win2K SP4 sapdbc.jar: 7.4.4 Build 001-000-156-754 Sun JDK 1.4.2_03
Win2K SP4
SQL Server 7.0 SP4 Win2K SP4 Sprinta2000.jar: i-net SPRINTA(tm) 2000 Version 5.01 Sun JDK 1.4.2_03
Win2K SP4
TJDO tests require the server be configured to use a case-sensitive sort order.
2000       Not yet retested.  

Compatibility Notes


Auto-table creation is severely limited with Firebird. In Firebird, DDL statements are not auto-committed and are executed at the end of a transaction, after any DML statements. This makes "on the fly" table creation in the middle of a DML transaction not work. Instead, you can use TJDO's SchemaManager to explicitly create tables (but auto-table creation mode must still be enabled). For example:

PersistenceManager pm = ...
SchemaManager sm = SchemaManagerFactory.getSchemaManager(pm);

sm.addClasses(new Class[] { Foo.class, Bar.class });


The isEmpty() method and certain forms of contains() are not supported in query filters. They rely on subqueries, which MySQL does not yet support (although this is slated for 4.1).

View objects are not available since MySQL doesn't support views.

Oracle 8.1.x

On Oracle, class names must be chosen such that they do not result in table names that collide with Oracle SQL keywords. This is due to a bug in Oracle's implementation of DatabaseMetaData.getIndexInfo(), which fails for such table names.

This bug is known to exist at least in versions 8.1.6 and 8.1.7 of Oracle's JDBC thin driver. The class naming limitation will be eliminated if and when the bug is fixed by Oracle, without requiring any changes to TJDO.

Oracle 9.x

TJDO does not (yet) attempt to make use of the new 9i TIMESTAMP data types. All date/time types are mapped to Oracle's DATE type, as done with 8i. For various unfortunate reasons (mostly having to do with Oracle's reluctance to conform to the standard JDBC API), even if you were to manually create your tables with TIMESTAMP columns they cannot be used with TJDO. This may be remedied in a future release.

PostgreSQL 7.2.x

There is a bug in the 7.2.x JDBC driver that can cause a NullPointerException in DatabaseMetaData.getIndexInfo(). The bug was fixed in source version 1.49 of org.postgresql.jdbc2.DatabaseMetaData. Unfortunately, all of the 7.2.x releases appear to have included version 1.48. The fix appears in the 7.3 drivers.

A modified copy of the 7.2 driver is available on SourceForge. It differs from the original only in that it uses version 1.49 of org.postgresql.jdbc2.DatabaseMetaData. If you would prefer to rebuild the driver from source the necessary change can be seen here.

SQL Server

The TINYINT data type in SQL Server is unsigned (range 0 - 255), whereas the java byte type is signed (range -128 - 127). TJDO will auto-create byte fields as TINYINT columns to minimize storage, but the effective range of values is then limited to 0 - 127. In order to store negative values you can manually create such columns as SMALLINT.