Exceção de SQL preparando a consulta com ORMLite

Estou usando um ORM (ORMlite) e todas as minhas chamadas estão indo bem até que eu recebo o seguinte erro.

Exceção no encadeamento “principal” org.h2.jdbc.JdbcSQLException: Erro de syntax na instrução SQL “SELECT * FROM” “STORIES” “WHERE” “TÍTULO” “= ‘Condutores de caso do Deepcut’ NÃO SEGUIDO [*] ””; Instrução SQL: SELECT * FROM Stories WHERE title = ‘Condutores de caso de deepcut’ não seguidos ” [42000-152] em org.h2.message.DbException.getJdbcSQLException (DbException.java:327) em org.h2.message.DbException. get (DbException.java:167) em org.h2.message.DbException.get (DbException.java:144) em org.h2.message.DbException.getSyntaxError (DbException.java:179) em org.h2.command.Parser .getSyntaxError (Parser.java:480) em org.h2.command.Parser.prepareCommand (Parser.java:229) em org.h2.engine.Session.prepareLocal (Session.java:426) em org.h2.engine. Session.prepareCommand (Session.java:374) em org.h2.jdbc.JdbcConnection.prepareCommand (JdbcConnection.java:1093) em org.h2.jdbc.JdbcPreparedStatement. (JdbcPreparedStatement.java:71) em org.h2.jdbc. JdbcConnection.prepareStatement (JdbcConnection.java:601) em com.j256.ormlite.jdbc.JdbcDatabaseConnection.compileStatement (JdbcDatabaseConnection.java:83) em com.j256.ormlite.stmt.mapped.MappedPreparedStmt.compile (MappedPreparedStmt.java:44) em com.j256.ormlite.stmt.S tatementExecutor.buildIterator (StatementExecutor.java:169) em com.j256.ormlite.stmt.StatementExecutor.query (StatementExecutor.java:119) em com.j256.ormlite.dao.BaseDaoImpl.query (BaseDaoImpl.java:189)

Estou confuso quanto ao que está errado. Eu estou chamando a pesquisa destas linhas:

 // get our query builder from the DAO QueryBuilder queryBuilder = StoryDao.queryBuilder(); // the 'title' field must be equal to title (a variable) queryBuilder.where().eq(Story.TITLE_FIELD_NAME, title); // prepare our sql statement PreparedQuery preparedQuery = queryBuilder.prepare(); // query for all stories that have that title List accountList = StoryDao.query(preparedQuery); 

Erro de syntax na instrução SQL “SELECT * FROM” “STORIES” “WHERE” “TITLE” “…

@bemace está correto que parece haver citações no título que estão estragando o escape de strings geradas pela consulta.

Em ORMLite, você deve usar o recurso SelectArg que gerará uma consulta com SQL? argumentos e, em seguida, passar a string para a instrução preparada diretamente.

Para documentação sobre o SelectArg , veja:

http://ormlite.com/docs/select-arg

Com o SelectArg , você faria algo como:

 QueryBuilder queryBuilder = StoryDao.queryBuilder(); SelectArg titleArg = new SelectArg(); queryBuilder.where().eq(Story.TITLE_FIELD_NAME, titleArg); PreparedQuery preparedQuery = queryBuilder.prepare(); titleArg.setValue(title); List accountList = StoryDao.query(preparedQuery); 

Eu estou adivinhando, mas parece que há um problema com o valor no campo do title , talvez uma marca de aspas sem escape?

Eu não estou familiarizado com ORMLite, mas title = 'Deepcut case leads 'not followed'' deepcut title = 'Deepcut case leads 'not followed'' não parecem corretos. Provavelmente deveria ser "Deepcut case leads 'not followed'" ou 'Deepcut case leads \'not followed\'' ou algo assim.

A syntax correta para a instrução seria:

 SELECT * FROM Histórias WHERE title = 'Leads de caso de deepcut' 'não seguidos' '';

Observe as aspas simples duplicadas dentro do literal da string.

Você precisará dizer à sua camada ORM para seguir as regras ANSI SQL para literais.

A exceção diz que há algum problema sintático com sua instrução SELECT gerada. Você pode imprimir a consulta gerada? Isso pode ajudá-lo a identificar o problema exato aqui.

EDIT: Olhando atentamente para o seu rastreamento mostra que a seqüência de escape não é tratada corretamente aqui. Este é o seu próprio QueryBuilder? Além disso, de acordo com este link , você está usando SelectArg ou definindo diretamente o título?