2016-12-03 9 views
0

Я создаю приложение конвертера валют с использованием JavaEE. Клиент в Интернете вводит сумму и валюту (например, «USD» и «EUR»).java.sql.SQLSyntaxErrorException: Ошибка синтаксиса:> Обнаружено "FROM"

Я не эксперт в области SQL, когда я бегу и протестировать веб-страницу, я получаю следующее сообщение об ошибке:

java.sql.SQLSyntaxErrorException: Syntax error: >Encountered "FROM" at line 1, column 12. Error Code: 30000 Call: SELECT >ID, FROM, RATE, TO, VALUE FROM RATE WHERE ((FROM = ?) AND (TO = ?)) bind >=> [2 parameters bound] Query: ReadAllQuery(referenceClass=Rate >sql="SELECT ID, FROM, RATE, TO, VALUE FROM RATE WHERE ((FROM = ?) AND (TO >= ?))")

Я использовал метод менеджер объект createQuery, который получает эти ценности и попытаться найти валюту коэффициент конверсии:

public double convertTo(double value, String from, String to) { 
    TypedQuery<Rate> query = em.createQuery("" 
      + "SELECT c FROM Rate c WHERE c.from = :from AND c.to = :to", Rate.class); 

    query.setParameter("to", to); 
    query.setParameter("from", from); 

    Rate result = query.getSingleResult(); 

    if (result == null) { 
     throw new EntityNotFoundException("Can't find rate"); 
    } 

    return value * result.getValue(); 
} 

Я пытаюсь изменить запрос, но он не работает. Какие-либо предложения?

ответ

0

побег from столбец потому что это ключевое слово или переименовать его.

попробовать двойные кавычки "из" или [от]

+0

Да, это было ключевым словом, благодаря @Peter_Saly. Теперь проблема заключается в том, что 'query.getSingleResult();' не находит строку в моей базе данных, которая соответствует значениям из и в валюте. это дает мне исключение: «getSingleResult() не извлекал никаких объектов». Моя таблица имеет 4 col: id, fromcurrency, tocurrency, rate. Я постараюсь увидеть этот вопрос сейчас. :( – teowey

+0

Я рекомендую использовать курсы для ссылки на валюту. Ориентировочная валюта может быть евро. С валютой referrence вам не нужно поддерживать все комбинации. Загрузите все ставки. Вычисление будет стоить евро, а не в валюте назначения. –