SQLiteJDBC
<- | SQLiteJDBC | Changelog | Usage | Speed | Custom Functions | Javadoc
Usage
Download the binary for the platform you are developing on. Open the tarball and copy the two files into your application directory:
sqlitejdbc.jar sqlitejdbc.dll (or libsqlitejdbc.so or libsqlitejdbc.jnilib)
Reference the driver in your code:
Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:filename"); // ... use the database ... conn.close();
And call your program with the driver's JAR file in the classpath and the C library in the librarypath. E.g.
java -cp sqlitejdbc.jar -Djava.library.path=. yourclass
That's it.
Dates and Time
SQLiteJDBC implements ResultSet.getDate()/getTime() and PreparedStatement.setDate()/setTime() in the only efficient way the JDBC spec allows for, which is storing the time as a 64-bit long of milliseconds since UTC. This is the standard unix timestamp.
This does not conflict with the SQLite standard format as long as care is taken to transform the unix timestamp into what SQLite functions use, either at the point where the date is stored or when using it elsewhere in SQLite. For example:
prep = conn.prepareStatement("insert into test values (?);"); prep.setDate(1, new Date(1000)); prep.executeUpdate(); rs = stat.executeQuery("select * from test;"); rs.getString(1) == "1000";In the above example the date is being stored as a unix timestamp. To store the date in the standard SQLite format, transform it with the datetime() and strftime() functions:
prep = conn.prepareStatement( "insert into test values datetime(? / 1000, 'unixepoch');"); prep.setDate(1, new Date(1092941466000)); prep.executeUpdate(); rs = stat.executeQuery("select * from test;"); assert(rs.getString(1).equals("2004-08-10 18:51:06")); rs = stat.executeQuery("select strftime('%s', col1) * 1000 from test;"); assert(rs.getDate(1).equals(new Date(987654321)));
Compiling
Download the source tarball, extract, set your $JAVA_HOME env variable and type:
$ make
See the README for more details.