2012-03-04 5 views
0

Я использовал javax.jdo.Query как здесь JDO for Google App Engine: escaping quotes. Тем не менее, моя строка запроса с одинарной кавычкой (') продолжает взорваться.appengine datastore query escaping single quote (')

Query query = pm.newQuery("select from " + Book.class.getName() + " where mArtist== '"+ artist + "' && mTitle=='" + title + "'"); 

Вот исключение

javax.jdo.JDOUserException: Portion of expression could not be parsed: 't Give Up' 
org.datanucleus.store.query.QueryCompilerSyntaxException: Portion of expression could not be parsed: 't Give Up' 

Вот это query.toString()

SELECT FROM com.example.Book WHERE mArtist== 'Famous Writer' && mTitle=='We Won''t Give Up' 

Yeh, я даже избегали одиночные кавычки (') с двойной одинарной кавычки в appengine docs

a str literal, as a single-quoted string. Single-quote characters in the string must be escaped as ''. For example: 'Joe''s Diner'

+0

Что вы имеете в виду под "разобранном"? Что именно происходит? –

+0

извините. получить немного драматичный и забыть об исключении. Я обновил сообщение с помощью Exception. –

ответ

1

Пример кода в документе охватывает только одну замену параметров. Вот немного больше.

Query query = pm.newQuery(Book.class); 
query.setFilter("mArtist == artist && mTitle == title"); 
query.declareParameters("String artist,String title");    
List<Book> list = (List<Book>) query.execute("Famous Writer","We Won't Give Up"); 

Некоторые вопросы SO стоит читать:

How to dynamically build JDO Queries on multiple parameters

Google Datastore problem with query on *User* type

Смежные вопросы