netbeans 5.5/mysql

ranirost
netbeans 5.5/mysql

Bonjour,

J'ai créé une base de donnéés avec mysql, je veux établir la connexion avec netbeans5.5. Quel sont les étapes d'établissement de connexion entre mysql et netbeans5.5? Veuillez me les décrire.

Merci.

jrebillat

Netbeans se connecte avec Mysql ? :shock: Je ne savais pas !

Ne veux-tu pas plutôt dire que tu veux accéder en Java à ta base Mysql ? 8)

ranirost

Salut,
Oui c'est comment réaliser une connexion entre Java et la BD Mysql en utilisant Netbeans
Merci. :idea:

jrebillat

Pour les spécificités de NetBeans je ne peux pas t'aider, je ne l'utilise pas.

En ce qui concerne la connexion d'un programme Java avec Mysql, voici quelques informations:

1- Préparer le contexte. Il te faut
- une base Mysql avec le nom du serveur, le nom de la base, le nom du user de la base et le password associé
-

2- Associer le jar au projet (ça c'est du NetBeans)

3- dans le code Java, se connecter au serveur:

     Connection connect;
      try
      {
          Class.forName("org.gjt.mm.mysql.Driver");
          connect = DriverManager.getConnection(
                  "jdbc:mysql://nom du serveur/nom de la base",
                  "nom du user", "mot de passe");
      }
      catch (Exception e)
      {
          e.printStackTrace();
      }

4- Ensuite on peut lancer des actions

        try
        {
            PreparedStatement stm = connect.prepareStatement(
                    "update " + table + " set " + column + "='" +
                    value + "' where " + colref + "=" + valref + ";");
            return stm.execute();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

5- ou des querys

        try
        {
            PreparedStatement stm = connect.prepareStatement(
                    "select * from " + table + ";");
            ResultSet resset = stm.executeQuery();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

Bon courage !

fredericmazue

jrebillat wrote:

dans le code Java, se connecter au serveur:
Connection connect; 
try 
{ 
	Class.forName("org.gjt.mm.mysql.Driver"); 
	connect = DriverManager.getConnection( 
		"jdbc:mysql://nom du serveur/nom de la base", 
		"nom du user", "mot de passe"); 
} 
catch (Exception e) 
{ 
	e.printStackTrace(); 
}

Pas tout à fait. Sans aucun doute ce code fonctionne dans une situation rudimentaire, à savoir une seule connexion à titre d'essai pour se faire la main, mais est il porteur de problèmes dans une application professionnelle. Quitte à apprendre, pourquoi ne pas apprendre dans les règles de l'art depuis le début ?
En programmation, que ce soit en Java ou avec un autre langage, on doit se soucier de la gestion des ressources potentiellement rares ou sur lesquelles on a pas une maîtrise complète. Une connexion JDBC tombe dans ces deux catégories. Une base de données ne permet qu'un nombre limitées de connexions simultanées et elle gère en général ces connexions dans un pool qui vit en dehors de l'application Java. Dans ce contexte le programmeur doit avoir le souci de libérer les connexions au plus vite et en toutes circonstances, même en cas d'erreurs. En C++ par exemple cela se fait dans des destructeurs. Il n'y a pas de destructeurs en Java, mais on y trouve une contre-partie dans les blocs finally qui eux n'existent pas en C++ puisqu'il y a les destructeurs ;)
Bref, voici l'idiome consacré pour une bonne gestion des connexions

Connection connect;
try 
{ 
	Class.forName("org.gjt.mm.mysql.Driver"); 
	connect = DriverManager.getConnection( 
		"jdbc:mysql://nom du serveur/nom de la base", 
		"nom du user", "mot de passe"); 
	// faire quelque chose avec la connexion
} 
catch (Exception e) 
{ 
	e.printStackTrace(); 
}
finally
{
	if(connect != null)
		connect.close();
}

Ensuite les erreurs qui peuvent se produire pendant le "faire quelque chose avec la connexion" doivent pouvoir remonter afin que la connexion soit fermée, d'abord pour libérer la ressource et aussi parce que si une erreur s'est produite, il est possible que la connexion ne soit plus en état de travailler correctement. Il ne faut donc pas museler l'exception (l'impression de la trace ne constitue pas un traitement et équivaut à museler) mais au contraire la relancer. Donc:

jrebillat wrote:

4- Ensuite on peut lancer des actions
try 
{ 
	PreparedStatement stm = connect.prepareStatement( 
	"update " + table + " set " + column + "='" + 
	value + "' where " + colref + "=" + valref + ";"); 
	return stm.execute(); 
} 
catch (Exception e) 
{ 
	e.printStackTrace();
}

doit devenir:

try 
{ 
	PreparedStatement stm = connect.prepareStatement( 
	"update " + table + " set " + column + "='" + 
	value + "' where " + colref + "=" + valref + ";"); 
	return stm.execute(); 
} 
catch (Exception e) 
{ 
	e.printStackTrace();
	throw e; 
}

On trouve ces recommandations dans tous les bons ouvrages sur le sujet, je pense par exemple à J2EE 1.4 de James Weaver, qui fait autorité en la matière et dont les chapitres sur JDBC sont exhaustifs. :)

19cmos83

Bonjour,

J'ai en fait une erreur lors de la connection a ma base, par le biais du code précédent.
J'ai réussi a établir une connection avec ma base, par l'intermediaire de l'IDE netbeans, avec les même parametres, et ca marche tres bien, j'inclus au passage un fichier mysql-connector-java-5.0.7-bin.jar pour établir la connection :
mais quand je le fait par le code, ca ne marche pas du tout, donc voici mon code :

package org;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.*;

/**
 *
 * @author  Rachid
 */
public class NewJApplet extends javax.swing.JApplet implements MouseListener{
    
    /** Initializes the applet NewJApplet */
    public void init() {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    
    
    jButton1.addMouseListener(this);
    

    /* code généré */
     
    
    }
    
                          

    public void mouseClicked(MouseEvent e) {
       Connection connect = null;
    try{
        Class.forName("com.mysql.jdbc.Driver");
        connect = DriverManager.getConnection("jdbc:mysql://localhost/bd_applet","root","");
        jLabel1.setText("Connection établie");
    }
    catch(Exception ex){
        ex.printStackTrace();
        jLabel1.setText("Connection echec");
    }
    /*En programmation, on doit se soucier de la gestion des ressources potentiellement rares ou sur lesquelles on a pas une maîtrise complète. 
     Une connexion JDBC tombe dans ces deux catégories. Une base de données ne permet qu'un nombre limitées de connexions simultanées 
     et elle gère en général ces connexions dans un pool qui vit en dehors de l'application Java. Dans ce contexte 
     le programmeur doit avoir le souci de libérer les connexions au plus vite et en toutes circonstances, même en cas d'erreurs. 
     En C++ par exemple cela se fait dans des destructeurs. Il n'y a pas de destructeurs en Java, mais on y trouve une contre-partie 
     dans les blocs finally qui eux n'existent pas en C++ puisqu'il y a les destructeurs Wink
     Bref, voici l'idiome consacré pour une bonne gestion des connexions */
    finally{
        if(connect != null)
            try {
            connect.close();
            } 
            catch (SQLException ex) {
            ex.printStackTrace();
            }
    } 
        
    }

Les erreurs générés sont :

init:
deps-jar:
compile-single:
run-applet:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:164)
        at org.NewJApplet.mouseClicked(NewJApplet.java:96)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)
        at java.awt.Component.processMouseEvent(Component.java:5504)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
        at java.awt.Component.processEvent(Component.java:5266)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3968)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Même si ce poste date de l'année derniere, tout en esperant avoir une réponse merci!

fredericmazue

Quote:
Même si ce poste date de l'année derniere,

:shock:
Sans blague ?
Le 21 juillet 2007 c'était l'année dernière ?
Comme le temps passe :shock:
:lol:
Pour ton erreur c'est vraiment simple
Quote:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Cela signifie que la JVM ne trouve pas le Driver MySQL. Sans aucun doute tu n'as pas mis le jar du Driver dans le CLASSPATH.
19cmos83

Et oui, le temps passe vite !

Merci, c est excatement ca.

Par contre pour le bloque :

finally{
        if(connect != null)
            try {
            connect.close();
            }
            catch (SQLException ex) {
            ex.printStackTrace();
            }
    } 

il s'execute a quel moment ? a quel moment les ressources utiliser pour la connexion sont elles libérés ?

Si je ferme par exemple la page, ou l'applet est ce que les ressources sont libérés a ce moment ci ou avant ?

fredericmazue

Quote:
il s'execute a quel moment ?

dès que //faire quelque chose rend la main ou lève une exception
Quote:
a quel moment les ressources utiliser pour la connexion sont elles libérés ?

A l'appel de connect.close(); bien évidemment.

Quote:
Si je ferme par exemple la page, ou l'applet est ce que les ressources sont libérés a ce moment ci ou avant ?

Dans ce cas brutal, normalement tout va être fermé/libéré au moment où la page est fermé, indépendemment d'où on se situe dans le flux d'exécution.
Mais ça ne veut pas dire qu'en conditions normales d'exécution, il ne faille pas gérer correctement les ressources, comme j'ai expliqué dans le post d'avant.
fredericmazue

Ah au fait...

MySQL... Applet .. hum...
Si jamais tu es en train d'envisager de te connecter depuis une applet à une base MySQL maintenue par un fournisseur d'accès, tu risques fort de te heurter au problème archi-ultra classique qui fera que ça ne sera pas possible.
En effet les fournisseurs d'accès n'autorisent que les connexions locales, donc côté serveur et non côté client, donc navigateur.