My application at present uses Microsoft Access, but now may be hosted on Linux boxes. Additionally while being accessed from multiple computers, one of these may update the records (when its being read by other users).
I also require that the embedded database should support complex SQL queries - like inner SQL, Joins, etc.
I tried SQLite, but many of the existing queries fail, or need to be fixed (like in a simple query using inner join the brackets after FROM was not acceptable to SQLite, and had to be removed). Right join too is not supported.
I came to know about Apache Derby and H2, but would first prefer your valuable opinion.
Edit:
I forgot to mention that my application is entirely written in Java.
Edit:
At preset I use Microsoft Access mdb, shared on network drive, making DSN-less connection from remote computers.
Update
I did trials with Firebird, and it really does seem very good, zero admin, and SQL compliant. It is fast, and I had no problems in any of the typical queries I could try on it. I am very satisfied with it, and hopefully will use it for the project for which I raised this question.
Hopefully Advantage Server too will be good, but could not get time to review it. After reviewing/using Firebird do not feel any need to try anything else.
This might be helpful in your research: Comparison of relational database management systems.
I personally would suggest taking a serious look at Firebird. It is cross-platform, has a native .NET provider and supports the joins you mention.
I would take a look at the Advantage Database Server (sybase.com). It runs on Windows, Linux, and NetWare. We have a commercial accounting / project management application for the construction industry and switched to Advantage 6 or 7 years ago. We have been extremly pleased with the performance and support. Customers are very happy too.
You can find a fairly detailed description of Derby's SQL Standards compliance here: http://wiki.apache.org/db-derby/SQLvsDerbyFeatures
Firebird is the most "comptible to SQL" embedded database. The engine of the embedded version is the same as the server edition.
Pay attention that with Firebird embedded only one client at a time can connect to the database, so you can span multiple connection from the same process but not connect from different processes. This issue is fixed in Firebird 2.5 and above.
I think it's Firebird.
Even Cte's are supported in Firebird 2.1 !
Firebird works on Windows, Linux, Mac OS...
Jaybird driver for Java.
There are some good migration tools from Access to Firebird:
Our company is using Advantage as well. We came at it from an XBase background, but have since embraced its SQL nature. It runs on a lot of platforms (Windows, Linux, NetWare) and has a bunch of drivers (PHP, ADO, JDBC, ODBC, Crystal) so that it works in just about any environment in which you might program.