code: public SQLiteStatement compileStatement(String sql) throws SQLException {
          acquireReference();
          try {
              return new SQLiteStatement(this, sql, null);
          } finally {
              releaseReference();
          }
      }
docs: Compiles an SQL statement into a reusable pre-compiled statement object.
  The parameters are identical to {@link #execSQL(String)}. You may put ?s in the
  statement and fill in those values with {@link SQLiteProgram#bindString}
  and {@link SQLiteProgram#bindLong} each time you want to run the
  statement. Statements may not return result sets larger than 1x1.
  <p>
  No two threads should be using the same {@link SQLiteStatement} at the same time.
  
  @param sql The raw SQL statement, may contain ? for unknown values to be
  bound later.
  @return A pre-compiled {@link SQLiteStatement} object. Note that
  {@link SQLiteStatement}s are not synchronized, see the documentation for more details.