Wish Update sqlite-jdbc-3.7.2.jar dependency in B4XTable

aeric

Expert
Licensed User
Longtime User
sqlite-jdbc-3.7.2.jar is the default SQLite JDBC library comes with B4X IDEs installation but it is quite old.

The good thing about this version is it is very small (3.05MB only).

The bad thing is, it is a dependency for B4XTable for B4J.

Recently, I tried to execute a SQLite query in B4J which involve using Window Functions to work with OVER keyword that produce Running Total.
It is only available in newer version of SQLite 3.25+.

Even though I have specified #AdditionalJar to newer version of SQLite JDBC library, I am getting the following error:
java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (near "(": syntax error)
This has taken me a few days to find what is the root cause since executing the query with DB Browser and tested on a small project works.
I got frustrated.

After several trial and errors, today I finally get the idea to see what happened if I renamed sqlite-jdbc-3.7.2.jar so the project cannot find or ignore this library.

Then I got compilation error that the project is still depends on the old/default sqlite-jdbc-3.7.2.jar

I need to find all the checked dependency libraries one by one, unzipping the b4xlib and view the manifest.txt file.

Finally, I found the only library which has dependency to sqlite-jdbc-3.7.2.jar is B4XTable.

I need to edit the manifest.txt to point to another newer version of sqlite-jdbc.jar and put the file back to the b4xlib.

Now my project compiles and able to execute the query without the missing "(" syntax error.

Currently I am pointing the manifest.txt inside B4XTable to sqlite-jdbc-3.39.3.0 which is working fine.
The bad thing is this jar is much bigger (12.1MB).

I will try to avoid using sqlite-jdbc-3.43.2.0+ since any version after this requires additional dependency (slf4j-api-2.0.9.jar) but this file is actually quite small (64KB).
 

aeric

Expert
Licensed User
Longtime User
I agree if it is for B4A but I think it doesn't matter for B4J to have bigger jar.
If possible, make B4XTable not depend directly on the sqlite jdbc jar (for B4J case).
How about let developer explicit set the version in project level?

I also agree that there are very specific cases to use some new features in sqlite.

For me renaming the sqlite 3.7.2 may be confusing in the future. Even though this is seems an easy workaround compare to edit the manifest text file but I prefer the latter. No worries.
 
Last edited:

aeric

Expert
Licensed User
Longtime User
Found a related thread
 
Last edited:
Cookies are required to use this site. You must accept them to continue using the site. Learn more…