SQL exception preparing query with ORMLite

久未见 提交于 2019-12-01 11:20:11

Syntax error in SQL statement " SELECT * FROM ""STORIES"" WHERE ""TITLE""...

@bemace is correct that there seem to be quotes in the title that is screwing up the escaping of strings generated by the query.

In ORMLite, you should use the SelectArg feature which will generate a query with SQL ? arguments and then pass the string to the prepared statement directly.

For documentation on the SelectArg, see:

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

With SelectArg, you'd do something like:

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);

I'm kind of guessing but it looks like there's a problem with the value in the title field, maybe an unescaped quote mark?

I'm not familiar with ORMLite but title = 'Deepcut case leads 'not followed'' doesn't look right. Should probably be "Deepcut case leads 'not followed'" or 'Deepcut case leads \'not followed\'' or some such.

The correct syntax for the statement would be:

SELECT * FROM Stories WHERE title = 'Deepcut case leads ''not followed'' ';

Note the duplicated single quotes inside the string literal.

You will need to tell your ORM layer to follow the ANSI SQL rules for literals.

The exception says that there is some syntactical problem with your generated SELECT statement. Can you print out the generated query? Doing that might help you pin down the exact issue here.

EDIT: Looking closely at your trace shows that string escaping is not handled properly here. Is this your own QueryBuilder? Also, as per this link, are you using SelectArg or directly setting the title?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!