Экранирование строкового литерала "by", зарезервированное слово sql, при создании объекта Java Query - PullRequest
0 голосов
/ 16 октября 2011

Следующий код вызывает исключение, потому что в строковом поле есть зарезервированное слово SQL «by». Как бы мне избежать этого зарезервированного слова. Код предназначен для хранилища данных Google.

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 ("by"), которое вышло из строя. Ключевые слова могут использоваться только в определенном порядке.

1 Ответ

2 голосов
/ 16 октября 2011

Попробуйте это:

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 {
  ...
}
...