Java

We can use litereplica with the SQLite JDBC Driver but we need to compile it from scratch using gcc (mingw on Windows).

Here are the steps:

git clone https://github.com/xerial/sqlite-jdbc --depth=1

cd sqlite-jdbc

make SQLITE_SOURCE="/path/to/litereplica" SQLITE_FLAGS="-DSQLITE_HAS_CODEC -DSQLITE_USE_URI=1"

Then we can use the generated jar file in our app.


Usage

We can follow to the original Usage Examples, with a single modification:

-> using a URI instead of just the filename when opening the database

Example code:


    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class Sample
    {
      public static void main(String[] args)
      {
        Connection connection = null;
        try
        {
          // create a database connection
          connection = DriverManager.getConnection("jdbc:sqlite:file:data.db?replica=master&slave=tcp://server:port");
          Statement statement = connection.createStatement();
          statement.setQueryTimeout(30);  // set timeout to 30 sec.

          statement.executeUpdate("drop table if exists person");
          statement.executeUpdate("create table person (id integer, name string)");
          statement.executeUpdate("insert into person values(1, 'leo')");
          statement.executeUpdate("insert into person values(2, 'yui')");
          ResultSet rs = statement.executeQuery("select * from person");
          while(rs.next())
          {
            // read the result set
            System.out.println("name = " + rs.getString("name"));
            System.out.println("id = " + rs.getInt("id"));
          }
        }
        catch(SQLException e)
        {
          // if the error message is "out of memory",
          // it probably means no database file is found
          System.err.println(e.getMessage());
        }
        finally
        {
          try
          {
            if(connection != null)
              connection.close();
          }
          catch(SQLException e)
          {
            // connection close failed.
            System.err.println(e);
          }
        }
      }
    }