2011-10-15 99 views
0

以下代碼引發異常,因爲字符串字段中包含SQL保留字「by」。我將如何逃避這個保留字。該代碼是爲谷歌數據存儲。在創建java查詢對象時轉義字符串「by」,sql保留字

String field="Hosted by me" 
PersistenceManager pm=PMF.get().getPersistenceManager(); 
    try{ 
    Query query=pm.newQuery("select from "+SomeObject.class.getName() 
      +" where mField=='"+field+"'"); 
    _logger.info(query.toString()); 
    SomeObject=query.execute(); 
    }finally{ 
     pm.close(); 
    } 

這裏是例外:: org.datanucleus.exceptions.NucleusUserException:查詢包含JDOQL關鍵字( 「通過」),其出故障。關鍵字只能按照定義的順序使用。

+0

你的列名是 「由我主持」?我會在單詞之間加下劃線分隔符。 – I82Much

+1

@ I82Much,該字段的*值*是「由我託管」。 –

+0

啊謝謝你,誤解了這個問題 – I82Much

回答

2

試試這個:

PersistenceManager pm = ...; 
try { 
    Query quer = pm.newQuery("select from " + SomeObject.class.getName() 
          " where mField == mFieldParam" + 
          " parameters String mFieldParam"); 
    List<SomeObject> results = (List<SomeObject>) query.execute("Hosted by me"); 
} finally { 
    ... 
} 
+0

Dilum謝謝!即使我閱讀了javadoc http://db.apache.org/jdo/api20/apidocs/javax/jdo/PersistenceManager.html#newQuery(java.lang.String),我也無法弄清楚。如果你能給我一些指示,我可以去閱讀一下這個用法的解釋。 –

+0

是的,apache文檔相當差。 javadocs是非常殘酷的。用GAE看看Google自己的文檔。從此開始:http://code.google.com/appengine/docs/java/datastore/jdo/queries.html –