IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Erreur Java Oracle


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Par défaut Erreur Java Oracle
    Salut à tous,

    J'ai le code Java suivant qui petrmet de faire un select sur une table qui se trouve dans une base de donnée sous Oracle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ResultSet rs1 = st1.executeQuery("SELECT * from TBATCHSCH where session_consigne= \""+ 
                 this.getSession()+"\""+ " AND uj= \"" +this.getUproc_job()+"\""+
                  " AND retour = \""+this.getCode_erreur()+"\"");
    Ce code pause pb et me sort une erreur Oracle ORA-00904, en fait il n'accepte pas les guillemets que je met. En fait il faut faire en oracle plutot retour = 'blabla' et retour = "blabla" comme je fais la. le pb cest que lorsque je remplace les " par les ' c'est java qui n'est plus content et qui commence à raler.
    Quelqu'un pourra me donner la syntaxe exacte de cette ligne de code de façon à satisfaire à nos deux amis Java et Oracle.

    Merci

  2. #2
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    et ca ?
    ca devrait convenir à Oracle et Java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ResultSet rs1 = st1.executeQuery("SELECT * from TBATCHSCH where session_consigne= '"+ 
                 this.getSession()+"'"+ " AND uj= '" +this.getUproc_job()+"'"+
                  " AND retour = '"+this.getCode_erreur()+"'");

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Par défaut
    ceci marche bien

  4. #4
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Merci d'utiliser les PreparedStatement ...

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    525
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 525
    Par défaut
    pourquoi c'est quoi la difference entre les deux

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 25
    Par défaut
    Un PreparedStaement te permet d'échaper les caractères proprement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    stmt = conn.preparedStatement("SELECT * FROM UTILISTEUR WHERE SESSIONID = ? AND ID = ?");
    stmt.setString(1, "blabal-avec 'et &");
    stmt.setInt(2, 45);
    ResultSet rs = stmt.execute...
    Le driver va automatiquement remplacer les ? par la représentation SQL de chaque paramètre passé par stmt.setXXX.

    Ce qui évitera les SQL inject. Immagine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    stmt.executeQuery("delete from utilisateur where login = '" + login + "'");
    Si le client qui utilise ton formulaire par exemple (si c'est une application web), et a saisi: >>' or 1 = 1 --<< dans ton champ, ta requête deviendra:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete from utilisateur where login = '' or 1 = 1 --'
    et là, aurevoir la table utilisateur

    Regarde la FAQ de JDBC pour t'informer sur comment fonctionnent les PreparedStatement

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/08/2013, 18h45
  2. Erreur Java Oracle
    Par seb974 dans le forum Installation
    Réponses: 4
    Dernier message: 23/04/2012, 20h36
  3. Réponses: 16
    Dernier message: 10/01/2006, 22h02
  4. Réponses: 5
    Dernier message: 12/12/2005, 13h13
  5. [java][Oracle]Ouvrir un fichier(blob) avec le browser
    Par marsup54 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 11/09/2003, 13h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo