Contact Us | Site Map
Firebird is used by approximately 1 million of software developers worldwide. High compatibility with industry standards on many fronts makes Firebird the obvious choice for developing interoperable applications for homogeneous and hybrid environments.
You are here: Home Development JDBC Driver
Join Firebird!
Join Firebird Foundation to support Firebird SQL development and receive multiple bonuses
Follow Us
Select your media preference
Google+ Twitter Facebook RSS
Subscribe to Firebird’s Newsletter to receive the latest news
JDBC Driver
Jaybird is a JCA/JDBC driver suite for the Firebird database server. Historically, Borland opened sources of the type 3 JDBC driver called InterClient. However, due to inherent limitations of the Firebird client library it, the type 3 driver was considered a dead end, and the Firebird team developed a pure Java implementation of the wire protocol. This implementation became the basis for JayBird.

The Jaybird driver is based on both the new JCA standard for application server connections to enterprise information systems and the well known JDBC standard. The JCA standard specifies an architecture in which an application server can co-operate with a driver so that the application server manages transactions, security, and resource pooling, while the driver supplies only the connection functionality. Although similar to the JDBC 2 XADataSource idea, the JCA specification is considerably clearer on the division of responsibility between the application server and driver.

Jaybird requires at least JDK 1.3.1 to compile and run properly.

The JayBird JCA/JDBC driver is distributed free of charge under the GNU Lesser General Public License (LGPL). Text of the license can be obtained from

For more information please refer to the Jaybird Wiki pages.

V.2.2.7 Release

Jaybird 2.2.7 released, with the following fix since Jaybird 2.2.6:

  • Fixed: blob return value of executable procedure obtained through getters on CallableStatement is 8 byte blob id, instead of expected blob content (JDBC-381)
This was a regression caused by the changes of JDBC-350.

The release is also available on maven(*):

*The artifactId depends on your target Java version: jaybird-jdk15, jaybird-jdk16, jaybird-jdk17 or jaybird-jdk18.

V.2.2.6 Release

Jaybird 2.2.6 released, with the following fixes since Jaybird 2.2.5:

  • Reverted Firebird 3 workaround for updatable result sets as bug has been fixed in Firebird (JDBC-330)
  • Fixed: Processing and closing the ResultSet from callable statement and then using the getters throwsNullPointerException (JDBC-350)
Using both the getters and the result set for the same callable statement is incorrect; the ability to do this might be removed in a future version of Jaybird. A ResultSet should be used for selectable procedures, while the getters should be used with executable procedures.
  • Fixed: FBManagedConnectionFactory.tryCompleteInLimboTransaction doesn't work with recent Firebird 3 builds (JDBC-353)
  • Fixed: Jaybird can throw a NullPointerException when a fatal connection error has occurred (JDBC-359)
  • Fixed: Calling close on a JCA connection triggers exception Connection enlisted in distributed transaction (JDBC-362)
  • Fixed: Potential memory-leak when using a lot of different connection strings and/or properties (JDBC-364)
  • Fixed: FBRowUpdater.buildInsertStatement doesn't quote column names (JDBC-370)
  • Fixed: EncodingFactory doesn't handle UnsupportedCharsetException (JDBC-371)
  • Fixed: Current method of quoting in FBRowUpdater incorrect for dialect 1 (JDBC-372)
The release is also available on maven(*):

*The artifactId depends on your target Java version: jaybird-jdk15, jaybird-jdk16, jaybird-jdk17 or jaybird-jdk18.

V.2.2.5 Release

Jaybird 2.2.5
 release contains the following fixes:

  • Fixed: getCrossReference broken by changes of JDBC-331 (JDBC-335)
  • Added: basic support for Java 8 java.time in PreparedStatement.setObject() and ResultSet.updateObject()(JDBC-339)
As part of this change the supported sub-second precision for java.sql.Timestamp has been increased from 1 millisecond to the maximum Firebird precision of 100 microseconds (or 0.1 millisecond).
  •  Fixed: Deadlocks and other thread safety issues with classes in org.firebirdsql.pool (JDBC-341)
The release is also available on maven(*):

*The artifactId depends on your target Java version: jaybird-jdk15, jaybird-jdk16, jaybird-jdk17 or jaybird-jdk18.

V.2.2.4 Release

Jaybird 2.2.4 release contains the following fixes:

  • Fixed: Exceptions during statement preparation leave connection and transaction open after explicit close (JDBC-311)
  • Fixed batch update (or insert) with blob set through setBinaryStream() sets empty blob for all but the first batch entry (JDBC-312)
  • Fixed incomplete checks of database, transaction, statement and blob handle validity before continuing with actions. These incomplete checks could lead to unexpected exceptions (for example a NullPointerException in iscDatabaseInfo) (JDBC-313)
  • Fixed error when setting connection charset equal to "file.encoding" java property (JDBC-314)
  • Fixed connection character set not correctly set when specifying the Java connection characterset (charSet or localEncodingproperty) (JDBC-315)
  • Fixed incorrect lengths and/or radix reported by getTypeInfo and getColumns metadata (JDBC-317JDBC-318)
  • Initial Java 8 / JDBC 4.2 support (JDBC-319)
  • Firebird 3 BOOLEAN type support, see Support for Firebird 3 BOOLEAN type in the release notes for more details (JDBC-321)
  • Added fallback of loading GDSFactoryPlugin implementations to prevent NullPointerException in Hibernate reverse engineering wizard in NetBeans (JDBC-325)
  • Fixed: Jaybird should specify dialect 3 in dpb when no explicit dialect was set (JDBC-327)
  • Fixed: several DatabaseMetaData methods defined by JDBC to only accept the actual table name also accepted a LIKE-pattern or empty string or null. This was changed to conform to JDBC. This change can break applications that relied on the incorrect behavior (JDBC-331)
Affected methods are: getPrimaryKeysgetBestRowIdentifiergetImportedKeysgetExportedKeys andgetCrossReference. As part of this change getIndexInfo now handles names in the wrong case slightly different.

Jaybird 3.0 will further modify and restrict the pattern matching and case sensitivity of metadata methods. See Future changes to Jaybirdin the release notes for more details.

The release is also available on maven(*):

*The artifactId depends on your target Java version: jaybird-jdk15, jaybird-jdk16, jaybird-jdk17 or jaybird-jdk18.

V.2.2.3 Release

Jaybird 2.2.3 release contains the following fixes:

  • Fixed incorrect synchronization in native and embedded protocol (JNI) implementation for iscBlobInfo and iscSeekBlob (JDBC-300)

WARNING: Although Jaybird strives for correct synchronization, a JDBC Connection, and its dependent objects should be used from a single Thread at a time, sharing on multiple threads concurrently is not advisable. 

  • Fixed holdable ResultSet is closed on auto-commit (JDBC-304JDBC-305)
  • Fixed table names missing or padded with spaces in Database view of IntelliJ IDEA (JDBC-308IDEA-100786)
  • Fixed incorrect JDBC minor version reported under Java 7; this resulted in an incorrect column name (for Java 7) in the metadata ofDatabaseMetaData.getColumns(...) (JDBC-309)
  • Added IOException to cause of GDSException with error 335544721; “Unable to complete network request to host “”” for further investigation (JDBC-306)

The release is also available on maven(*):


* The artifactId depends on your target Java version: jaybird-jdk15, jaybird-jdk16 or jaybird-jdk17.

V.2.2.2 Release

Jaybird 2.2.2 release contains the following fixes:
  • Fixed: FBMaintenanceManager.listLimboTransactions() reports incorrect transaction id when the result contains multi-site transactions in limbo (JDBC-266)
  • Fixed: Calling PreparedStatement.setClob(int, Clob) with a non-Firebird Clob (eg like Hibernate does) or callingPreparedStatement.setClob(int, Reader) throws FBSQLException: “You can't start before the beginning of the blob” (JDBC-281)
  • Fixed: Connection property types not properly processed from (JDBC-284)
  • Fixed: JNI implementation of parameter buffer writes incorrect integers (JDBC-285JDBC-286)
  • Changed: Throw SQLException when calling executeexecuteQueryexecuteUpdate and addBatch methods accepting a query string on a PreparedStatement or CallableStatement as required by JDBC 4.0 (JDBC-288)
  • Fixed: LIKE escape character JDBC escape ({escape '<char>'}) doesn't work (JDBC-290)
  • Added: Support for a connect timeout using connection property connectTimeout. This property can be specified in the JDBC URL orProperties object or on the DataSource. If the connectTimeout property is not specified, the general DriverManagerproperty loginTimeout is used. The value is the timeout in seconds. (JDBC-295)
The release is also available on maven(*):

*The artifactId depends on your target Java version: jaybird-jdk15, jaybird-jdk16 or jaybird-jdk17.

V.2.2.1 Release

Jaybird 2.2.1 release contains the following fixes:
  • Fixed: UnsatisfiedLinkError in libjaybird22(_x64).so undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE on Linux (JDBC-259)
  • Added connection property columnLabelForName for backwards compatible behavior ofResultSetMetaData#getColumnName(int) and compatibility with bug in com.sun.rowset.CachedRowSetImpl (JDBC-260)
Set property to true for backwards compatible behavior (getColumnName() returns the column label); don't set the property or set it to false for JDBC-compliant behavior (recommended).
  • Fixed: setString(column, null) on “? IS (NOT) NULL” condition does not set parameter to NULL (JDBC-264)
  • The charSet connection property now accepts all aliases of the supported Java character sets (eg instead of only Cp1252 nowwindows-1252 is also accepted) (JDBC-267)
  • Fixed: values of charSet property are case-sensitive (JDBC-268)
  • Fixed: setting a parameter as NULL with the native protocol does not work when Firebird describes the parameter as not nullable (JDBC-271)
The release is also available on maven(*):

*The artifactId depends on your target Java version: jaybird-jdk15, jaybird-jdk16 or jaybird-jdk17.

V.2.2.0 Release

Jaybird 2.2.0 release contains the following changes:
  • Enhanced support for JDBC 4.0 (Java 6)
  • Support for JDBC 4.1 (Java 7) — including try-with-resources support,
  • Implementation of getGeneratedKeys(),
  • Enhanced support for the services API,
  • Support for 64 bit native libraries for Type 2 / Embedded,
  • A number of bug fixes.
The release is also available on maven(*):

*The artifactId depends on your target Java version: jaybird-jdk15, jaybird-jdk16 or jaybird-jdk17. 

V.2.1.6 Release (Critical)

Jaybird 2.1.6 released, with the following fixes:

  • JDBC-97: Blob.getBytes() method should not allow position below 1 — not critical 
  • JDBC-108: Problems with record resultset to call primary composite — critical 
  • JDBC-119: updateRow() primary key violation issue — critical 
  • JDBC-118: Remote PID and process name for FB 2.1 monitoring tables — not critical

Due to critical fixes in JDBC-108 and JDBC-119, everybody using Jaybird versions between 2.1.2 and 2.1.5 is advised to upgrade to this new version to avoid data corruption when doing updates via ResultSet.updateRow() when the table has a composite primary key. Cases where table's primary key has only one column or there is no primary key at all are not affected.

Comments to JDBC-118:

The only platform independent solution turns out to be via the -D property, therefore two new properties are and org.firebirdsql.jdbc.processName. If they are specified, values are passed to Firebird 2.1. Also one can use "normal" properties passed via URL or data source configuration. In this case, the property names are process_id andprocess_name

With versions of Firebird prior to Fb 2.1, using these properties will cause an exception while connecting to Firebird. A more intelligent solution will be implemented in Jaybird 2.2.


Mark Rotteveel: mrotteveel at


Home About Firebird Documentation Downloads Community Support Development Case Studies Back to Top
This site and the pages contained within are Copyright © 2000-2015, Firebird Project. Firebird® is a registered trademark of Firebird Foundation Incorporated. Developed by DQ Team.