One of the great strengths of SQLite is that it handles large (many gigabyte), complex datasets (many tables) and lets you run fairly sophisticated queries. You trade the lack of concurrent access for its zero-administration, of course, but if you want to slice and dice a large dataset, you can do a lot worse than load it into SQLite, build some indexes and work in SQL. The "low level" interface this Java provides doesn't even let you do a join...