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 :

SQLException : insertion de données dans une base de donnée


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut SQLException : insertion de données dans une base de donnée
    Bonjour,

    j'aimerais passer les valeurs des variables situées dans la classe Test dans une base de donnée
    voici ma classe Test.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    public class Test {	
    	static Logger log = Logger.getLogger(SendSms.class.getName());
    	static String msg;
    	public static void main(String[] args) {
     
    		Send t= new Send();
    		 t.init();
    		 t.server = "http://127.0.0.1:8800/";
     
    		 Scanner lectureClavier = new Scanner(System.in);
    		 System.out.print("Veuillez entrez votre text \n");
    		 msg = lectureClavier.nextLine();
     
    		 t.sentid=1;
    		 t.phonenumber = "+1234567890";
    		 t.text = msg;
     
    		try{
    		 Class.forName("org.postgresql.Driver");
    	      System.out.println("Driver O.K.");
     
    	      String url = "jdbc:postgresql://localhost:5432/db";
    	      String user = "postgres";
    	      String passwd = "12345";
     
    	      Connection conn = DriverManager.getConnection(url, user, passwd);
    	      System.out.println("Connexion effective !"); 
     
    	      Statement st= conn.createStatement();
    	      String sql= "INSERT INTO sender(rec_id, num_tel, message) VALUES ("+t.sentid+","+t.phonenumber+","+t.text+")";
    	      st.executeQuery(sql);
    	      log.debug("fermeture de la connexion");
    	      conn.close();
    	      st.close();
     
    	    } 
     
    		catch(SQLException e){
    			log.error(e.getMessage());
    		      e.printStackTrace();
    		}
     
    		catch(ClassNotFoundException e){
    			log.error(e.getMessage());
    		      e.printStackTrace();
    		}
    	}
    }
    voici ma Base de donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE sender
    (
      rec_id serial NOT NULL,
      num_tel character varying(20) DEFAULT ''::character varying,
      message text,
      CONSTRAINT sender_pkey PRIMARY KEY (rec_id)
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE sender
      OWNER TO postgres;
    voici l'exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Veuillez entrez votre text 
    ceci est un test
    Driver O.K.
    Connexion effective !
    - ERREUR: erreur de syntaxe sur ou près de « est »
      Position*: 76
    org.postgresql.util.PSQLException: ERREUR: erreur de syntaxe sur ou près de « est »
      Position*: 76
    	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
    	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
    	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:283)
    	at com.services.Test.main(Test.java:50)
    voci un 2eme essai avec un text plus court
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Veuillez entrez votre text 
    fffff
    Driver O.K.
    Connexion effective !
    - ERREUR: la colonne « fffff » n'existe pas
      Position*: 71
    org.postgresql.util.PSQLException: ERREUR: la colonne « fffff » n'existe pas
      Position*: 71
    	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
    	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
    	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:283)
    	at com.services.Test.main(Test.java:50)

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Utilise un PreparedStatement et les méthodes setXXX pour placer les paramètres de ta requetes. Tu éviteras beaucoup d'ennuis.

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonsoir,

    La solution de fr1man est très pertient, mais seulement à titre d'information pour ton erreur, toutes les valeurs à insérer dans une table doivent être entourées de quotes à part le type entier dans un SQL.

    A+.

  4. #4
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Utilise un PreparedStatement et les méthodes setXXX pour placer les paramètres de ta requetes. Tu éviteras beaucoup d'ennuis.
    merci pour votre réponse.
    J'ai suivi votre conseil maintenant il ne me génère plus d'erreur par contre la BD est toujours vide: aucune variable n'est enregistrée
    en plus le programme ne m'affiche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     log.debug("fermeture de la connexion");
    j'ai comme résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Veuillez entrez votre text 
    dsfsdfdsfsd
    Driver O.K.
    Connexion effective !
    et ma BD est toujours vierge

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    As-tu appelé sa méthode executeUpdate()?
    Sinon, peut-on voir ton code?

    A+.

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    As-tu appelé sa méthode executeUpdate()?
    Sinon, peut-on voir ton code?

    A+.
    biensur, voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    public class Test {	
    	static Logger log = Logger.getLogger(SendSms.class.getName());
    	static String msg;
    	public static void main(String[] args) {
     
    		Send t= new Send();
    		 t.init();
    		 t.server = "http://127.0.0.1:8800/";
     
    		 Scanner lectureClavier = new Scanner(System.in);
    		 System.out.print("Veuillez entrez votre text \n");
    		 msg = lectureClavier.nextLine();
     
    		 t.sentid=1;
    		 t.phonenumber = "+1234567890";
    		 t.text = msg;
     
    		try{
    		 Class.forName("org.postgresql.Driver");
    	      System.out.println("Driver O.K.");
     
    	      String url = "jdbc:postgresql://localhost:5432/db";
    	      String user = "postgres";
    	      String passwd = "12345";
     
    	      Connection conn = DriverManager.getConnection(url, user, passwd);
    	      System.out.println("Connexion effective !"); 
     
    	      PreparedStatement  st= conn.prepareStatement("INSERT INTO received (recid, num_tel, message) VALUES ("+sms.sentid+","+sms.phonenumber+","+sms.text+")");
    	      st.executeUpdate();
    	      log.debug("fermeture de la connexion");
    	      conn.close();
    	      st.close();
     
    	    } 
     
    		catch(SQLException e){
    			log.error(e.getMessage());
    		      e.printStackTrace();
    		}
     
    		catch(ClassNotFoundException e){
    			log.error(e.getMessage());
    		      e.printStackTrace();
    		}
    	}
    }

    voici les resultats
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Veuillez entrez votre text 
    sdtgsrdg
    Driver O.K.
    Connexion effective !
    - ERREUR: la colonne « sdtgsrdg » n'existe pas
      Position*: 71
    org.postgresql.util.PSQLException: ERREUR: la colonne « sdtgsrdg » n'existe pas
      Position*: 71
    	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
    	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
    	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
    	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:363)
    	at com.services.Test.main(Test.java:52)

  7. #7
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PreparedStatement  st= conn.prepareStatement("INSERT INTO received (recid, num_tel, message) VALUES (?, ?,?)");
    st.setInt(1, sms.sentid);
    st.setString(2, sms.phonenumber);
    ...
    Regarde la documentation sur PreparedStatement.

  8. #8
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2011
    Messages : 177
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PreparedStatement  st= conn.prepareStatement("INSERT INTO received (recid, num_tel, message) VALUES (?, ?,?)");
    st.setInt(1, sms.sentid);
    st.setString(2, sms.phonenumber);
    ...
    Regarde la documentation sur PreparedStatement.
    merci pour votre réponse.ça marche à merveille !!

Discussions similaires

  1. inserer les données d'une base de données dans une autres?
    Par enstein8 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 14/10/2011, 13h33
  2. insertion des blob dans une base de données
    Par ala1986 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 05/04/2009, 15h48
  3. Insertion d'Ip dans une base de données
    Par momoh dans le forum VB.NET
    Réponses: 1
    Dernier message: 19/02/2009, 16h16
  4. Réponses: 2
    Dernier message: 18/03/2007, 19h02
  5. [MySQL] Insertion d'image dans une base de données
    Par dragonfly dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/03/2006, 14h59

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