java - appengine 数据存储区查询转义单引号 (')

标签 java sql google-app-engine jdo

我在这里使用了 javax.jdo.Query JDO for Google App Engine: escaping quotes 。然而,我的带有单引号(')的查询字符串不断被分解。

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

这是一个异常(exception)

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 文档中使用双单引号转义了单引号(')

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

最佳答案

通过字符串连接构建查询几乎总是一件有风险的事情,即使 SQL 注入(inject)攻击是不可能的。 (他们不属于 GAE。)

参见http://code.google.com/appengine/docs/java/datastore/jdo/queries.html#Introducing_Queries并注意“参数替换”部分。

关于java - appengine 数据存储区查询转义单引号 ('),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9552064/

相关文章:

java - Jersey:具有 1 个元素的 Json 数组被序列化为对象

java - 如何在 Hibernate 中仅检索部分(少数)pojo 字段?

java - Spring : how this field in controller is injected?

java - 从 JComboBox 获取值

google-app-engine - 应用程序的任务、Cron 作业或后端

java - 数据存储区不显示 false boolean 值

java - GAE-J中标注系统的设计

sql - 如何正确查询数据库以获取包含列表的结果

sql - 在两个表之间共享自动递增的主键

sql - 查找约束中的父键