Jaybird 4.0.0-beta-1 available for testing

The first beta for Jaybird 4 is available for testing.

We’d really appreciate it if you take the time to test this version of Jaybird with your applications. Bug reports about undocumented changes in behavior are appreciated. Feedback can be sent to the Firebird-java mailing list or reported on the issue tracker http://tracker.firebirdsql.org/browse/JDBC.

Jaybird 4 is – compared to Jaybird 3 – an incremental release that builds on the foundations of Jaybird 3. The focus of this release has been on further improving JDBC support and adding support for the new data types and features of Firebird 4.

The main new features are:

  • Wire encryption support (backported to Jaybird 3.0.4)
  • Database encryption support (backported to Jaybird 3.0.4)
  • Authentication plugin improvements
  • Firebird 4 DECFLOAT support
  • Firebird 4 extended numeric precision support
  • Firebird 4 time zone support
  • JDBC RowId support
  • JDBC DatabaseMetaData.getPseudoColumns implemented
  • JDBC DatabaseMetaData.getVersionColumns implemented
  • Improved JDBC function escape support
  • New JDBC protocol prefix jdbc:firebird:
  • Generated keys support improvements

Jaybird 4.0.0-beta-1 is for testing purposes only, and not intended for production use.

See also:

Jaybird 3.0.0-alpha-1 release for testing

Jaybird 3.0.0-alpha-1 has been published for testing. We would really appreciate if you could start testing your applications with this version and provide feedback on stability and behavior, but also on the release notes.

Feedback can be sent to the Firebird-java mailinglist or on the issue tracker http://tracker.firebirdsql.org/browse/JDBC.

Jaybird 3.0 is a big change from Jaybird 2.2 and earlier. We have rewritten the entire low-level implementation to be able to support protocol improvements in newer Firebird versions, made changes with a stricter interpretation of the JDBC requirements, and removed some parts that were either obsolete or not functioning correctly.

We recommend that you do not consider Jaybird 3.0 a drop-in replacement for Jaybird 2.2, and study the release notes carefully.

See:

Jaybird 3.0 Alpha 1 is available from Maven central:

Groupid: org.firebirdsql.jdbc,
Artifactid: jaybird-jdkXX (where XX is 17 or 18).
Version: 3.0.0-alpha-1

For example:

<dependency>
     <groupId>org.firebirdsql.jdbc</groupId>
     <artifactId>jaybird-jdk18</artifactId>
     <version>3.0.0-alpha-1</version>
</dependency>

If your application is deployed to a Java EE application server, you will need to exclude the javax.resource:connector-api dependency, and add it as a provided dependency:

<dependency>
     <groupId>org.firebirdsql.jdbc</groupId>
     <artifactId>jaybird-jdk18</artifactId>
     <version>3.0.0-alpha-1</version>
     <exclusions>
         <exclusion>
             <groupId>javax.resource</groupId>
             <artifactId>connector-api</artifactId>
         </exclusion>
     </exclusions>
</dependency>
<dependency>
     <groupId>javax.resource</groupId>
     <artifactId>connector-api</artifactId>
     <version>1.5</version>
     <scope>provided</scope>
</dependency>

If you want to use Type 2 support (native, local or embedded), you need to explicitly include JNA 4.2.2 as a dependency:

<dependency>
     <groupId>net.java.dev.jna</groupId>
     <artifactId>jna</artifactId>
     <version>4.2.2</version>
</dependency>

Jaybird 2.2.4 released

The Firebird JDBC team is happy to announce the release of Jaybird 2.2.4.

This 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 localEncoding property)  (JDBC-315)
  • Fixed incorrect lengths and/or radix reported by getTypeInfo and getColumns metadata (JDBC-317, JDBC-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: getPrimaryKeys, getBestRowIdentifier, getImportedKeys, getExportedKeys and getCrossReference. 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 Jaybird in the release notes for more details.

Downloads available from JDBC driver section on the Firebird website.

The release is also available on maven(*):

<groupId>org.firebirdsql.jdbc</groupId>
<artifactId>jaybird-jdkXX</artifactId>
<version>2.2.4</version>

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

Jaybird 2.2.3 (Firebird JDBC) released

The Firebird JDBC team is happy to announce the release of Jaybird 2.2.3.

See http://www.firebirdsql.org/en/jdbc-driver/ for the downloadlinks.

The release is also available on maven:
<groupId>org.firebirdsql.jdbc</groupId>
<artifactId>jaybird-jdkXX</artifactId>
<version>2.2.3</version>

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

The following has been changed or fixed in Jaybird 2.2.3:

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

More details are available in the Jaybird 2.2.3 releasenotes.

Jaybird 2.2.2 Released

The Firebird JDBC team is happy to announce the release of Jaybird 2.2.2.

See http://www.firebirdsql.org/en/jdbc-driver/ for the downloadlinks.

The release is also available on maven:
<groupId>org.firebirdsql.jdbc</groupId>
<artifactId>jaybird-jdkXX</artifactId>
<version>2.2.2</version>

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

The following has been changed or fixed in Jaybird 2.2.2:

  • 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 calling PreparedStatement.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 isc_dpb_types.properties (JDBC-284)
  • Fixed: JNI implementation of parameter buffer writes incorrect integers (JDBC-285, JDBC-286)
  • Changed: Throw SQLException when calling execute, executeQuery, executeUpdate and addBatch methods accepting a query string on a PreparedStatement or CallableStatement as required by JDBC 4.0 (JDBC-288)
    NOTE: Be aware that this change can break existing code if you depended on the old, non-standard behavior! With addBatch(String) the old behavior lead to a memory leak and unexpected results.
  • 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 or Properties object or on the DataSource. If the connectTimeout property is not specified, the general DriverManager property loginTimeout is used. The value is the timeout in seconds. (JDBC-295)
    For the Java wire protocol the connect timeout will detect unreachable hosts. In the JNI implementation (native protocol) the connect timeout works as the DPB item isc_dpb_connect_timeout which only works after connecting to the server for the op_accept phase of the protocol. This means that – for the native protocol – the connect timeout will not detect unreachable hosts within the timeout. As that might be unexpected, an SQLWarning is added to the connection if the property is specified with the native protocol.
  • As part of the connect timeout change, hostname handling (if the hostname is an IP-address) in the Java wire protocol was changed. This should not have an impact in recent Java versions, but on older Java versions (Java 5 up to update 5) this might result in a delay in connecting using an IP-address, if that address can’t be reverse-resolved to a hostname. Workaround is to add an entry for that IP-address to the /etc/hosts or %WINDIR%\System32\Drivers\etc\hosts file.

Jaybird survey results

Last month the two-week survey on Jaybird ended. In total we received 132 responses. I’d like to thank everyone who responded for their input.

To put the number of responses in perspective: Jaybird 2.2.1 (released last week) was downloaded 853 times, Jaybird 2.2.0 (released in July 2012) was downloaded 8203 times (as of last Sunday, the 7th of October)

I will go by each question and discuss the results, where relevant I will add some info on the influence of these results.

1. Development vs Use

The opening question was about the use of Jaybird: developing applications, or just using it in third party applications/tools.

As you can see the overall majority uses Jaybird in development of applications, while the remaining 9% use it in applications developed by others.

2. Jaybird versions

Next we asked which Jaybird versions you were using. This question allowed for multiple options, so it adds up to over 100%.

It is good to see that almost three months after release of 2.2 the majority has switched (or is also using) Jaybird 2.2.

If you are still using an older version (especially before 2.1.6), I am interested to know if there are things that are keeping you from switching to newer versions.

3. Jaybird protocols

We also wanted to know which ‘protocol’ implementations in Jaybird you were using. This question also allowed for multiple options.

As you can see the vast majority is using the (default) pure java protocol, with embedded and native falling far behind. One respondent chose Other, and specified SQLJ, which is not a standard protocol in Jaybird.

4. OS platforms

Next: the OSes you use, once again this question allowed for multiple options:

Windows (81%) and Linux (73%) are contending for first place and Mac OS X (13%) in third. Looking at the raw data, 55% use both Linux and Windows, and 8% use Linux, Windows and Max OS X. Of the 5 specifying Other, 2 use FreeBSD and 2 use Solaris, and 1 specified Android, although Jaybird currently doesn’t work on Android.

5. Java versions

We are very interested in the versions of Java you use, for our reasons: see question 9. This question allowed for multiple options.

As you can see Java 6 and 7 have the greatest number of users (53% use both Java 6 and 7). Java 5 is only a small minority. The respondent specifying Other is using Java 1.4.

6. Primary Java version

The previous question asked for all Java versions, so now we asked for the primary version you use or (have to) support:

Here we can see that a year after release of Java 7 that Java 6 is still in the lead, followed by Java 7. I am curious how this will develop over the next year, as Java 6 will go to End Of Public Updates in February 2013.

For contrast: the Jaybird 2.2 and 2.2.1 downloads from sourceforge.net show the following distribution (as of last Sunday):

7. Firebird versions

Similar as with Java, we really like to know what Firebird versions you use with Jaybird. This question allowed for multiple options.

These results mostly confirm my expectations, although I was surprised to see that there are more people (still) using Firebird 1.5 than for example Firebird 2.0. This probably has to do with changes between 1.x and 2.x making it harder to switch to 2.x, than to migrate from 2.0 to 2.1 or 2.5. The 1 specifying Other is using Red Database from Red Soft.

8. Primary Firebird version

The previous question asked for all Firebird versions you use, this one was about the primary version you use or support.

No surprises here: most of you are using Firebird 2.5.

For the few still using Firebird 1.x: please be aware that Jaybird 2.2 is the last version to formally support Firebird 1.x. Future versions of Jaybird might still work with Firebird 1.x, but we will no longer fix bugs that occur only in 1.x, and we might make changes to support or use 2.x features without considering compatibility with Firebird 1.x.

9. Drop support for Java 5

We asked what you think about continuing support for Java 5 in Jaybird 2.3 and later.

As you can see the majority want us to drop support or didn’t care either way. Given the response here and in questions 5 and 6, we have made the decision to remove Java 5 support in Jaybird 2.3.

Removing Java 5 support from Jaybird 2.3 will allow us to maintain Jaybird as a single codebase (at least for now, who knows what changes Java 8 will need). This makes it a lot easier to improve our JDBC 4.0 and 4.1 support. Until Jaybird 2.3 is released, we will continue Java 5 support with Jaybird 2.2.

10. Types of applications developed with Jaybird

Next question: what type of applications do you develop. This question allowed for multiple options.

JavaEE and desktop applications are almost the same in size, with 33% developing both.The Other option included respondents developing non-JavaEE application servers and/or websites, mobile development and command line tools.

Next survey I will probably add more choices, or use a single choice option to get a better distinction.

11. Application servers used with Jaybird

This question allowed for multiple options. Clearly Apache Tomcat is king, with JBoss a distant second.

I am not sure yet how I am going to use these results, but it will probably mostly influence future documentation, examples and testing efforts.

12. Improvements to Jaybird

The team for Jaybird is small, so we want to invest our time wisely. The following lists what the respondents think are areas that need improvement:

This question allowed for multiple options. Clearly both JDBC compliance and compatibility with third-party tools are most important to you. We will try to give extra attention to these areas. You can help us identify specific improvement points by posting them either on the Firebird-Java list, or on the issue tracker.

13. Firebird Foundation

Finally we asked if you (or your company) support development of Firebird (and Jaybird) with a membership or sponsorship of the Firebird Foundation.

Firebird Foundation is an organisation of individuals and companies of various sizes, working together as parts of a non-profit organisation that aims to ensure the continued development of the open source Firebird relational database and related products. The dues paid by members play an important part in directly funding development of the Firebird engine.

Unfortunately, the vast majority (94%) of respondents is not a member, on the upside: 8% expressed interest to become a member. Becoming a member and contributing financially isn’t the only way to contribute and improve Jaybird (and Firebird in general): reporting issues, contributing patches or writing documentation are all very welcome.

Additional comments

We also included a comment field for additional comments.

These comments included words of praise like:

  • I wanted to take this opportunity to thank you for all of your hard work!
  • Thank you for all your hard work in developing this crucial link to an excellent database 🙂
  • jdbc is very important for firebirdsql. without it, firebird wouldn’t be in 1-st database class 😉
  • Jaybird is very good. Good work.
  • I like using Firebird database and use jaybird. I have plan for future to contribute developing
    firebird database if needed.

Calls for improvements to the code or new features:

  • please split the driver for easy android porting
  • we need the ability to easily create and use basic classes heirs of FBXxxxxXxxxx as: myFBXxxxxXxxxx extends FBXxxxxXxxxx; For example now FBDriver create ResultSet, Connection internal and we are not have easy way to use myResultSet class and myConnection class in my application
  • I tried to contribute once to fix a bug that was affecting me, and found the code too messy and hard to follow. Maybe its time to have a major restructuring, to be more developer-friendly.
  • security
  • would be great to improve efficiency of queries over high latency links

For some of these things I can’t make promises, as these require a lot of time and effort with – in my opinion – little gain for Jaybird itself (eg restructuring the driver to get it to work on Android, or to simplify external extensibility).

I think that time and effort can be better directed to other things (eg improving general code quality and structure, JDBC compliance and third-party tools support). However if you want to contribute (to) an improvement like this, you are more than welcome to contact me directly or start a discussion thread on Firebird-Java.

The comments also yielded a (potential) bug report:

  • The latest jaybird driver seems to kill SymmetricDS (the latest version) it’s most likely their issue but thought it was a good to know

And miscellaneous comments:

  • I have donated to Firebird before, but don’t know if that makes me a sponsor?
    I love the fact that Jaybird talks directly to Firebird, but have found that the old InterServer/InterClient pair were sometimes quite a bit faster than Jaybird.
  • I will talk my managers to support Firebird (and environment tools like Jaybird, Flamerobin etc.) development.

This concludes this overview of the survey results. I plan to do a new survey next year, and once again: thanks for all your input.

Jaybird 2.2.1 Released

The Firebird JDBC team is happy to announce the release of Jaybird 2.2.1.

This 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 of ResultSetMetaData#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 now windows-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:
<groupId>org.firebirdsql.jdbc</groupId>
<artifactId>jaybird-jdkXX</artifactId>
<version>2.2.1</version>

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

1 2 3