Ajout en mode graphique avec swing

mdh12 Messages postés 55 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 29 mars 2011 - 7 déc. 2010 à 09:49
majilion Messages postés 26 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 27 mars 2011 - 9 déc. 2010 à 14:55
salut,


je fait test connexion avec base de donne et ca marche avec sucée
maintenant je veux faire l'ajout en mode graphique

je veux faire une bonne stratégie de développement.

1-créer une class etudiant (contient cin,nom,prenom)
2-créer interface ADDetudiant
2-créer une class connexion

après un simple recherche sur internet j'entends de ce terme "PreparedStatement"

voila le code de bouton 'valider'

qui sert a enregistrer le donnes saisies dans la base de donné

private void jButtonValiderActionPerformed(java.awt.event.ActionEvent evt) {                                               
 
         Etudiant e = new Etudiant();
         e.setCin(Integer.parseInt(jTextFieldCIN.getText()));
         e.setNom(jTextFieldNom.getText());
         e.setPrenom(jTextFieldPrenom.getText());
 
    // ici je dois instancier la class connexion pour ouvrir connection
 
   // faire String sql = "INSERT INTO etudiant (cin, nom, prenom) 
//VALUES (?, ?, ?)";
//PreparedStatement statement = connection.prepareStatement(sql);
 
//statement.set.....................
 
 
//fermer connexion 
 
}


et pour la classe connexion que dois ouvrir connexion

je suppose que dois être comme suit;
 
public class connexion
{
    public static void main(String[] args) {
      
 
 
 
        Connection connexion;
          Statement statement;
          ResultSet resultat;
try {
    Class.forName("com.mysql.jdbc.Driver");
    connexion = DriverManager.getConnection("jdbc:mysql://localhost/test","root","");
    statement = connexion.createStatement();
 
 
 }catch(Exception e){
               System.out.print("Impossible de se connecté à MySQL");
          }
 
}
 
 
 


pouvez m'aider a compléter ce code (dans le bouton "valider"

merci d'avance

3 réponses

amundain Messages postés 110 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 28 août 2012 1
7 déc. 2010 à 14:57
Salut,

le PreparedStatement sert à créer une requête générique dans laquelle tu spécifies les paramètres futurs avec des '?'.
Tu les injectes ensuite dans la requête avec la méthode set(), en effet.

Dans ton exemple :

String sql = "INSERT INTO etudiant (cin, nom, prenom) VALUES (?, ?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);

On imagine que le 'cin' (paramètre 1 de ta requête) est un Integer et le reste des String (paramètres 2 et 3).

Tu fais donc :

statement.setInt(1,<TA VALEUR INT>);
statement.setString(2,<TA VALEUR STRING>);
statement.setString(3,<TA VALEUR STRING>);

ResultSet toto = statement.executeQuery();

Cela revient au même que de faire :

Statement statement = connection.createStatement();
String sql = "INSERT INTO etudiant (cin, nom, prenom) VALUES (125, 'TOTO', 'TOTO')";
ResulSet toto = statement.executeQuery(sql);

Généralement, il est préférable d'utiliser un PreparedStatement qui est précompilé et qui s'exécute donc plus vite, mais les avis divergent...à toi de voir.

A +,

amundain

Java bien,merci.
0
mdh12 Messages postés 55 Date d'inscription dimanche 13 décembre 2009 Statut Membre Dernière intervention 29 mars 2011
8 déc. 2010 à 13:41
j'essaye de changer un peux en ce code

amis toujours le même problème
private void jButtonValiderActionPerformed(java.awt.event.ActionEvent evt) {

Integer cin=Integer.parseInt(jTextFieldCIN.getText());
String nom=jTextFieldNom.getText();
String prenom=jTextFieldPrenom.getText();
String classe=jTextFieldClasse.getText();
String tel=jTextFieldTel.getText();
String email=jTextFieldEmail.getText();




connection c=new connection();

String sql = "INSERT INTO etudiant (CIN, nom, prenom,classe,tel,email) VALUES(?,?,?.?,?,?)";

try {

PreparedStatement preparedStatement = connection.connection.prepareStatement(sql);
preparedStatement.setObject(1,cin,Types.INTEGER);
preparedStatement.setObject(2,nom,Types.VARCHAR);
preparedStatement.setObject(3,"prenom",Types.VARCHAR);
preparedStatement.setObject(4,"classe",Types.VARCHAR);
preparedStatement.setObject(5,"tel",Types.VARCHAR);
preparedStatement.setObject(6,"email",Types.VARCHAR);
preparedStatement.executeUpdate();


} catch (SQLException ex) {
Logger.getLogger(interfaceEtudiant.class.getName()).log(Level.SEVERE, null, ex);
}

}


public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new interfaceEtudiant().setVisible(true);
}
});
}


je veux insérer dans la base de donner les valeurs que j'ai saisie en formulaire(jTextFieldNom.getText()

don je dois mettre les valeurs cin et nom ,,,dans preparedStatement.setObject,,,
( n'oubli pas que cin=Integer.parseInt(jTextFieldCIN.getText()))

mais toujour il m'affiche erreur

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Pack2.interfaceEtudiant.jButtonValiderActionPerformed(interfaceEtudiant.java:201)
at Pack2.interfaceEtudiant.access$200(interfaceEtudiant.java:22)
at Pack2.interfaceEtudiant$3.actionPerformed(interfaceEtudiant.java:87)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
0
majilion Messages postés 26 Date d'inscription mercredi 21 février 2007 Statut Membre Dernière intervention 27 mars 2011
9 déc. 2010 à 14:55
private void jButtonValiderActionPerformed(java.awt.event.ActionEvent evt) {

..
..
..


connection c=new connection();

String sql = "INSERT INTO etudiant (CIN, nom, prenom,classe,tel,email) VALUES(?,?,?.?,?,?)";

try {

PreparedStatement preparedStatement = connection.connection.prepareStatement(sql); // c'est quoi ça!! tu as declaré une variable avec le nom "c" alors ici tu dois faire [color=blue]c.connection"ça bien sur si tu as une variable d'instance qui s'appele connection dans la classe connection "/color

preparedStatement.setObject(1,cin,Types.INTEGER);
preparedStatement.setObject(2,nom,Types.VARCHAR);
preparedStatement.setObject(3,"prenom",Types.VARCHAR);
preparedStatement.setObject(4,"classe",Types.VARCHAR);
preparedStatement.setObject(5,"tel",Types.VARCHAR);
preparedStatement.setObject(6,"email",Types.VARCHAR);
preparedStatement.executeUpdate();


} catch (SQLException ex) {
Logger.getLogger(interfaceEtudiant.class.getName()).log(Level.SEVERE, null, ex);
}

}
0
Rejoignez-nous