2012-03-04 14 views
0

ここでは、JDO for Google App Engine: escaping quotesのようなjavax.jdo.Queryを使用しています。しかし、一重引用符( ')付きのクエリ文字列は爆発的になり続けます。ここでappengine datastoreクエリーをエスケープする一重引用符( ')

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' 

葉、私は二重の単一引用符ごとに( ')単一引用符をしても脱出してきました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

このドキュメントのサンプルコードでは、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

関連する問題