SQL statement with '?' gives error with SQLite database

Hi,

We are using Liquibase (2.0.5) with SQLite database. If SQL statement have ‘?’ in it, so we gets error like,

  1.     [java]           Caused By: not implemented by SQLite JDBC driver
  2.          [java]     at liquibase.changelog.ChangeSet.execute(ChangeSet.java:347)
  3.          [java]     at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor
  4.     .java:27)
  5.          [java]     at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.j
  6.     ava:58)
  7.          [java]     at liquibase.Liquibase.update(Liquibase.java:114)
  8.          [java]     at liquibase.integration.commandline.Main.doMigration(Main.java:
  9.     825)
  10.          [java]     at liquibase.integration.commandline.Main.main(Main.java:134)


Changelog for SQL is like:

  1.              
  2.             error full query
  3.                       
  4.                    UPDATE person set question =‘How many times?’ where id = ‘howtried’;                   
  5.                   
  6.        

If i update class “liquibase.executor.jvm.JdbcExecutor” in  liquibase as below, it works fine.
I want to know,

  •      is this change safe?
  •      is there any other way to solve this problem?
  •     Should i file bug and wait for new Liquibase version?

  1.     class ExecuteStatementCallback implements StatementCallback {
  2.                 public Object doInStatement(Statement stmt) throws SQLException, DatabaseException {
  3.                     for (String statement : applyVisitors(sql, sqlVisitors)) {
  4.                         if (database instanceof OracleDatabase) {
  5.                             statement = statement.replaceFirst("/\s*/\s*$", “”); //remove duplicated /'s
  6.                         }
  7.                         log.debug(“Executing EXECUTE database command: “+statement);
  8.                       // if (statement.contains(”?”)) {
  9.                       //     stmt.setEscapeProcessing(true);
  10.                       //  }
  11.                         try {
  12.                             stmt.execute(statement);
  13.                         } catch (SQLException e) {
  14.                             throw e;
  15.                         }
  16.                     }
  17.                     return null;
  18.                 }

I have just comment “stmt.setEscapeProcessing(true);” it works fine.

Please guide me in this scenario.