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

avec Java Discussion :

Problème dans une requête


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 90
    Par défaut Problème dans une requête
    Bonjour,

    J'ai une fenêtre qui contient trois champs textField, textField_1, textField_2 et je souhaiterais stocker les valeurs entrées dans ces champs de texte, au sein d'une table nommée "seminaire".

    Pour ce faire, j'ai entré le code suivant après avoir établi la connexion avec une base Postgres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    btnSinscrire.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    try{String s="INSERT INTO seminaire VALUES('"+textField.getText()+"','"+textField_1.getText()+"','"+textField_2.getText()+"');";
                int re=state.executeUpdate(s);
     
                    System.out.println("fait");
     
                    }
                catch(Exception a){System.out.println(a.getMessage());
                    }
                }
            });
    Ca m'affiche une l'erreur suivant:
    ERREUR: la valeur du tableau doit commencer avec « { » ou avec l'information de la
    dimension
    Position*: 29
    La table séminaire contient les colonnes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nom(character varying[20]),
    prenom(character varying[20]),
    email(character varying[20])
    Quelqu'un saurait-il m'indiquer d'où peut venir cette erreur ?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ta table a l'air bizarre. Les chaine de charactères dans une table en sql, c'est le mot clé varchar et non pas char qui représente un seul charactère.


    Ceci à supposer que c'est bien une erreur SQL que tu nous donne. Ce n'est pas clair d'où viens ce message.

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 90
    Par défaut
    pour être plus précis voilà le code complet
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JLabel;
    import javax.swing.JTextField;
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
     
     
    public class inscription extends JFrame {
     
    	private JPanel contentPane;
    	private JTextField textField;
    	private JTextField textField_1;
    	private JTextField textField_2;
    	Connection con;
    	Statement state;
    	ResultSet res;
     
    	/**
             * Launch the application.
             */
    	public static void main(String[] args) {
     
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					inscription frame = new inscription("org.postgresql.Driver","jdbc:postgresql://localhost:5432/base","postgres","password");
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
     
    	/**
             * Create the frame.
             */
    	public inscription(String drive,String url,String utilisateur,String pass) {
    		try{
    		Class.forName(drive);
    		System.out.println("driver Ok");
    		con=DriverManager.getConnection(url,utilisateur, pass);
    		 state=con.createStatement();
    		System.out.println("connection etablie");
    		}
    		catch(Exception e){System.out.println(e.getMessage());}
    		setTitle("Inscription");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 450, 300);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		contentPane.setLayout(null);
     
    		JLabel lblNom = new JLabel("Nom");
    		lblNom.setBounds(36, 29, 46, 14);
    		contentPane.add(lblNom);
     
    		textField = new JTextField();
    		textField.setBounds(156, 26, 175, 20);
    		contentPane.add(textField);
    		textField.setColumns(10);
     
    		JLabel lblPrnom = new JLabel("Pr\u00E9nom");
    		lblPrnom.setBounds(36, 66, 61, 14);
    		contentPane.add(lblPrnom);
     
    		textField_1 = new JTextField();
    		textField_1.setBounds(156, 57, 175, 20);
    		contentPane.add(textField_1);
    		textField_1.setColumns(10);
     
    		JLabel lblEmail = new JLabel("Email");
    		lblEmail.setBounds(36, 103, 61, 14);
    		contentPane.add(lblEmail);
     
    		textField_2 = new JTextField();
    		textField_2.setBounds(156, 100, 175, 20);
    		contentPane.add(textField_2);
    		textField_2.setColumns(10);
     
    		JButton btnSinscrire = new JButton("S'inscrire");
    		btnSinscrire.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				try{String s="INSERT INTO seminaire VALUES('"+textField.getText()+"','"+textField_1.getText()+"','"+textField_2.getText()+"');";
    			int re=state.executeUpdate(s);
     
     
    				while(res.next()){
    					System.out.println(res.getString("id"));
     
    				}
    				}
    			catch(Exception a){System.out.println(a.getMessage());
    				}
    			}
    		});
     
    		btnSinscrire.setBounds(146, 146, 89, 23);
    		contentPane.add(btnSinscrire);
     
    		JButton btnAffichierListe = new JButton("Affichier Liste");
    		btnAffichierListe.setBounds(146, 195, 122, 23);
    		contentPane.add(btnAffichierListe);
    	}
    j'ai créé la table avec l’interface graphique de Postgres et pour le type de colonnes il m'affiche pas varchar ce qui fait que je suis obligé de choisir character varying qui me semble le plus proche de varchar à moins qu'il ne signifie pas la même chose

  4. #4
    Membre averti
    Inscrit en
    Décembre 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2012
    Messages : 16
    Par défaut
    Selon ce thread tu peux utiliser TEXT sans te soucier apres.


    J'ai une question a te poser pourquoi tu utilises cette ligne de code?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    				while(res.next()){
    					System.out.println(res.getString("id"));
     
    				}

    Concernant ta structure tu devrais opter pour une structure un peu plus MVC :

    Petit cas de figure si tu veux faire un INSERT d'un seminaire autre part qu'au click d'une bouton, tu reecriras la meme ligne de code pour faire la meme tache?

    Tu pourrais utiliser des managers qui sont des class final avec des methodes static.
    Ce qui t'evitera de faire d'utiliser le mot clef new

    Ex.:

    Tu peux egalement representer un Seminaire en tant qu'object (cela pourrait être utile par la suite).

    J'aurai plutot tendance a utiliser cette maniere

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SeminaireManager.addSeminaire(Semainaire s)
    La raison tu pourrais avoir les methodes suivante dans ton manager qui pourrait etre la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<Seminaire> SeminaireManager.getAllSeminaire()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Seminaire SeminaireManager.getSeminaireById(Integer id)
    etc...

    Tu as une/des instances qui represente un seminaire.

    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SeminaireManager.addSeminaire(String param1, String param2...)
    De plus, il serait wise d'utiliser des requetes prepares car inserer le data du user directement. Bonjour les injections SQL pour ton application.
    NEVER TRUST USER INPUT

    Sans parler d'injection SQL que se passerait-il si tu met un String dans une colonne qui s'attend a avoir un Integer...?
    Evite de parler a la BDD tant que toutes les preconditions ne sont pas remplies.

    Tu peux trouver plus des examples ici

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 90
    Par défaut
    Vous avez raison merci infiniment j'ai utilisé PreparedStatement et ça a marché très bien :voici la rectification du 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    import java.awt.BorderLayout;
    import java.awt.EventQueue;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.Statement;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JLabel;
    import javax.swing.JTextField;
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
     
     
    public class inscription extends JFrame {
     
    	private JPanel contentPane;
    	private JTextField textField;
    	private JTextField textField_1;
    	private JTextField textField_2;
    	Connection con;
    	PreparedStatement state;
    	ResultSet res;
     
    	/**
             * Launch the application.
             */
    	public static void main(String[] args) {
     
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					inscription frame = new inscription("org.postgresql.Driver","jdbc:postgresql://localhost:5432/table","postgres","password");
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
     
    	/**
             * Create the frame.
             */
    	public inscription(String drive,String url,String utilisateur,String pass) {
    		try{
    		Class.forName(drive);
    		System.out.println("driver Ok");
    		con=DriverManager.getConnection(url,utilisateur, pass);
    		String s="INSERT INTO tablee VALUES(?,?,?);";
    		 state=con.prepareStatement(s);
    		System.out.println("connection etablie");
    		}
    		catch(Exception e){System.out.println(e.getMessage());}
    		setTitle("Inscription");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 450, 300);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		contentPane.setLayout(null);
     
    		JLabel lblNom = new JLabel("Nom");
    		lblNom.setBounds(36, 29, 46, 14);
    		contentPane.add(lblNom);
     
    		textField = new JTextField();
    		textField.setBounds(156, 26, 175, 20);
    		contentPane.add(textField);
    		textField.setColumns(10);
     
    		JLabel lblPrnom = new JLabel("Pr\u00E9nom");
    		lblPrnom.setBounds(36, 66, 61, 14);
    		contentPane.add(lblPrnom);
     
    		textField_1 = new JTextField();
    		textField_1.setBounds(156, 57, 175, 20);
    		contentPane.add(textField_1);
    		textField_1.setColumns(10);
     
    		JLabel lblEmail = new JLabel("Email");
    		lblEmail.setBounds(36, 103, 61, 14);
    		contentPane.add(lblEmail);
     
    		textField_2 = new JTextField();
    		textField_2.setBounds(156, 100, 175, 20);
    		contentPane.add(textField_2);
    		textField_2.setColumns(10);
     
    		JButton btnSinscrire = new JButton("S'inscrire");
    		btnSinscrire.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				try{
    				state.setString(1,textField.getText());
    				state.setString(2,textField_1.getText());
    				state.setString(3,textField_2.getText());
    				state.executeUpdate();
    				System.out.println("operation effectue avec succes");
    				}
    			catch(Exception a){System.out.println(a.getMessage());
    				}
    			}
    		});
     
    		btnSinscrire.setBounds(146, 146, 89, 23);
    		contentPane.add(btnSinscrire);
     
    		JButton btnAffichierListe = new JButton("Affichier Liste");
    		btnAffichierListe.setBounds(146, 195, 122, 23);
    		contentPane.add(btnAffichierListe);
    	}
     
     
    }

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

Discussions similaires

  1. Problème dans une requête
    Par clettebou dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/10/2006, 19h03
  2. [Factoring_Clause]Problème dans une requête
    Par media dans le forum Oracle
    Réponses: 4
    Dernier message: 30/08/2006, 13h47
  3. [Access] Problème dans une requête SQL avec INNER JOIN ?
    Par bds2006 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/06/2006, 10h57
  4. Problème dans une requête SQL avec AS et ON ?
    Par bds2006 dans le forum Bases de données
    Réponses: 9
    Dernier message: 26/06/2006, 15h25
  5. problème dans une requête
    Par pierrOPSG dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/11/2005, 10h28

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