2016-12-03 15 views
0

Je suis en train de créer une application de conversion de devises utilisant JavaEE. Le client Web entre un montant et les devises (par exemple 'USD' et 'EUR').java.sql.SQLSyntaxErrorException: Erreur de syntaxe:> Rencontré "FROM"

Je ne suis pas un expert en SQL, quand je lance et tester la page Web que je reçois l'erreur suivante:

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 >= ?))")

je méthode de gestionnaire d'entités createQuery qui obtient les ces valeurs et essayer de trouver les devises taux de conversion:

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(); 
} 

J'essaie de changer la requête, mais cela ne fonctionne pas non plus. Aucune suggestion?

Répondre

0

échapper from colonne parce que c'est mot-clé ou le renommer.

essayer des guillemets doubles "de" ou [de]

+0

Oui, ce fut le mot-clé, grâce @Peter_Saly. Le problème est maintenant que 'query.getSingleResult();' ne trouve pas la ligne dans ma base de données qui correspond aux devises from et to. cela me donne l'exception: "getSingleResult() n'a récupéré aucune entité." Ma table a 4 col: id, fromcurrency, tocurrency, rate. Je vais essayer de voir ce problème maintenant. :( – teowey

+0

Je recommande d'utiliser des taux pour la devise de référence La devise de référence pourrait être l'euro Avec la monnaie de référence, vous n'avez pas besoin de maintenir toutes les combinaisons.Chargez tous les taux.Le calcul sera à l'euro puis à la devise de destination.Pas de perte de précision. –