使用ORMLite准备查询的SQL异常

Ale*_*lex 2 java sql exception h2 ormlite

我正在使用ORM(ORMlite),我的所有调用都进行得很顺利,直到我收到以下错误.

线程"main"中的异常org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误"SELECT*FROM""STORIES""WHERE""TITLE""='Deepcut case leads'not FOLLOWED [*]''"; SQL语句:SELECT*FROM StoriesWHERE title='Deepcut case leads'未跟随org.h2.message.DbException.get处的org.h2.message.DbException.getJdbcSQLException(DbException.java:327)中的'[42000-152] DbException.java:167)org.h2.message.DbException.get(DbException.java:144)org.h2.message.DbException.getSyntaxError(DbException.java:179)atg.h2.command.Parser.getSyntaxError (Parser.java:480)org.h2.command.Parser.prepareCommand(Parser.java:229)org.h2.engine.Session.prepareLocal(Session.java:426)atg.h2.engine.Session. prepare命令(Session.java:374)org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1093)org.h2.jdbc.JdbcPreparedStatement.(JdbcPreparedStatement.java:71)org.h2.jdbc.JdbcConnection. prepare.com(JdbcConnection.java:601)位于com.j256.ormlite.jdbc.JdbcDatabaseConnection.compileStatement(JdbcDatabaseConnection.java:83)的com.j256.ormlite.stmt.mapped.MappedPreparedStmt.compile(MappedPreparedStmt.java:44)at com .j256.ormlite.stmt.StatementExecut com.j256.ormlite.stmt.StatementExecutor.query(StatementExecutor.java:119)中的or.buildIterator(StatementExecutor.java:169)at com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:189)

我很困惑,哪些是错的.我从这些行调用搜索:

// get our query builder from the DAO
QueryBuilder<Story, Integer> 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<Story> preparedQuery = queryBuilder.prepare();
// query for all stories that have that title
List<Story> accountList = StoryDao.query(preparedQuery);
Run Code Online (Sandbox Code Playgroud)

Gra*_*ray 10

SQL语句中的语法错误"SELECT*FROM""STORIES""WHERE""TITLE""......

@bemace是正确的,标题中的引号似乎搞砸了查询生成的字符串的转义.

在ORMLite中,您应该使用SelectArg将使用SQL生成查询的功能吗?参数然后直接将字符串传递给预准备语句.

有关的文档SelectArg,请参阅:

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

有了SelectArg,你会做类似的事情:

QueryBuilder<Story, Integer> queryBuilder = StoryDao.queryBuilder();
SelectArg titleArg = new SelectArg();
queryBuilder.where().eq(Story.TITLE_FIELD_NAME, titleArg);
PreparedQuery<Story> preparedQuery = queryBuilder.prepare();
titleArg.setValue(title);
List<Story> accountList = StoryDao.query(preparedQuery);
Run Code Online (Sandbox Code Playgroud)