Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/10/2007, à 16:53

x@v

[DEBUTANT]connexion de java à mysql ?

Bonjour,
je cherche à me connecter à une table faite sous phpmyadmin mais apparment les drivers du JDBC ne sont pas bien configurer donc je cherche le PATHCLASS sous UBUNTU, je ne sais pas ou il se trouve?
Merci

Dernière modification par x@v (Le 31/10/2007, à 11:50)


[-- qwerty user --]

Hors ligne

#2 Le 30/10/2007, à 23:06

obiwankennedy

Re : [DEBUTANT]connexion de java à mysql ?

Je pense que tu devrais changer de titre de ton article.
les bases créent sous phpmyadmin sont des bases mysql donc c'est plus connexion en java à mysql.

donc déja montre nous le code ou cherche sous google des exemples de connexions.


Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam

Hors ligne

#3 Le 30/10/2007, à 23:20

voitats6

Re : [DEBUTANT]connexion de java à mysql ?

Bonjour !

A partir de quelle application veux-tu te connecter à ta table mysql ?

C'est possible par exemple avec OpenOffice, avec java d'ailleurs, soit JDBC.

Donne-nous plus d'infos.

Hors ligne

#4 Le 31/10/2007, à 11:26

x@v

Re : [DEBUTANT]connexion de java à mysql ?

A partir d'eclipse j'ai télécharger le jdbc puis je l'ai installer mais je ne suis pas sur de moi... Sur le résultat


[-- qwerty user --]

Hors ligne

#5 Le 31/10/2007, à 13:49

Martopioche

Re : [DEBUTANT]connexion de java à mysql ?

Oulàlà...

Oki, alors primo, pour les drivers, voir ici :
http://dev.mysql.com/doc/refman/5.0/fr/java-connector.html
Tu récupère donc un "driver", en fait un simple jar. Si tu utilise Eclipse, pour l'utiliser dans Eclipse, tu le déclare dans les dépendances (propriétés de ton projet>java Build Path>libraries).

Ensuite, tu t'assure d'avoir une base MySQL accessible (logiquement que tu a dût créer avec phpMyAdmin)

Ensuite, il faut que tu t'y connecte, pour cela, c'est par exemple :

try{
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    java.sql.Connection conn = java.sql.DriverManager.getConnection(
      "jdbc:mysql://localhost:3306/maBase", "user", "password");
} catch(Exception e){
    System.out.println("Connection ratée: "+e);
    System.exit(-1);  
}

où : localhost = adresse de l'hébergement de ta base
      3306 : port d'écoute de MySQL par défaut, adapte si tu a changé
      User : le user qui a les bons droits sous MySQL
      password : le mot de passe dudit user.

Après, tu peux enchainer avec les statements sur conn.

voila.

Hors ligne

#6 Le 05/11/2007, à 14:28

x@v

Re : [DEBUTANT]connexion de java à mysql ?

oui ça fonctionne nickel, par contre il faudrai que je fasse une requête SQL  pour afficher ma table ?
Mais comment l'implémenter ?
Mon IHM

package Jdbc;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;

public class JBDCTest extends Panel implements ActionListener
{
	TextField nomDriver;
	TextField urlConnection;
	TextField nomLogin;
	TextField motPasse;
	Button boutonConnection;
	TextField requeteSQL;
	List resultatRequete;
	Button boutonExecuter;
	
	public JBDCTest()
	{
		Panel haut;
		Panel bas;

		haut = new Panel();
		bas = new Panel();
		
		boutonConnection = new Button("Connection");
		boutonConnection.addActionListener(this);
		
		boutonExecuter = new Button("Execution");
		boutonExecuter.addActionListener(this);
		
		Panel p1 = new Panel();
		p1.setLayout(new GridLayout(4, 2));
		
		p1.add(new Label ("Driver :"));
		p1.add(nomDriver = new TextField(32));
		//nomDriver.setText("cvcxxvcxvc");
		
		p1.add(new Label ("URL jdbc"));
		p1.add(urlConnection = new TextField(32));
		//urlConnection.setText("eeeeeeeeee");
		
		p1.add(new Label ("login :"));
		p1.add(nomLogin = new TextField(32));
		//nomLogin.setText("rrrrrr");
		
		p1.add(new Label ("password :"));
		p1.add(motPasse = new TextField(32));
		//motPasse.setText("******");
		
		haut.setLayout(new BorderLayout());
		haut.add(p1, BorderLayout.NORTH);
		haut.add(boutonConnection, BorderLayout.SOUTH);
		
		Panel p2 = new Panel();
		p2.setLayout(new BorderLayout());
		p2.add(new Label("requete"), BorderLayout.WEST);
		p2.add(requeteSQL = new TextField(32), BorderLayout.CENTER);
		
		
		Panel p3 = new Panel();
		p3.add(p2, BorderLayout.NORTH);
		p3.add(boutonExecuter, BorderLayout.SOUTH);
		
		bas.setLayout( new BorderLayout());
		bas.add(p3, BorderLayout.NORTH);
		bas.add(resultatRequete = new List(20));
		
		setLayout(new BorderLayout());
		add(haut, BorderLayout.NORTH);
		add(bas, BorderLayout.CENTER);
	}

	public void actionPerformed(ActionEvent evt)
	{
	}
	/*public void actionPerformed(ActionEvent evt)
	{
		// System.out.println("Not implemented !!");
		
		resultatRequete.add("Au boulôt les gars");
	}*/
	
	/*public static void main(String[] args) 
	{
		JBDCTest test;

		Frame f = new Frame();
		f.setSize(500, 400);
		test = new JBDCTest();
		f.add(test, BorderLayout.CENTER);
		f.addWindowListener
		( 
			new WindowAdapter()
			{
				public void windowClosing(WindowEvent e)
				{
					System.exit(0);
				}			
			}
		);
		f.setVisible(true);
	}*/
}

Mon main

package Jdbc;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;

class Main extends JBDCTest
{
	Connection cnx = null;
	public Main() 
	{
	this (" ", " ");
	}

	public Main (String driver, String url) 
	{
		nomDriver.setText(driver);
		urlConnection.setText(url);
		motPasse.setEchoChar('*');
	}
	
	public void actionPerformed(ActionEvent evt)
	{	
		// getSource() reconnait le bouton qui a été cliquer
		// on cast la getSource en bouton
		Button b = (Button)(evt.getSource());
		
		try {
			if ((b == boutonConnection) && (cnx == null))
			{
				System.out.println("dans CONNECT");
				String driver = new String ( nomDriver.getText());
				String url = new String ( urlConnection.getText());
				String login = new String ( nomLogin.getText());
				String passwd = new String ( motPasse.getText());
				
				Class.forName(driver);
				cnx = DriverManager.getConnection(url, login, passwd);
			}
			
			else if (( b == boutonConnection) && ( cnx != null))
				System.out.println("connexion établie !");
			
			else if (( b == boutonExecuter) && ( cnx != null))
			{
				System.out.println("dans EXECUTE");
				Statement stmt = cnx.createStatement();
				resultatRequete.removeAll();
				String requete = new String ( requeteSQL.getText());
				ResultSet rs = stmt.executeQuery(requete);
				ResultSetMetaData rsmd = rs.getMetaData();
				
				int nbcol = rsmd.getColumnCount();
				String titre = "";
				String resultat;
				for (int i = 0; i < nbcol; i++)
					titre += " : " + rsmd.getColumnName(i + 1);
				resultatRequete.add(titre);
					while(rs.next())
					{
						resultat = new String();
						for (int a = 0; a < nbcol; a++)
						{
							resultat += " : " + rs.getString(a + 1);
							System.out.println(rs.getString(a +1));
						}
						resultatRequete.add(resultat);
						System.out.println("requete =" + resultat);
					}
				rs.close();
				stmt.close();
			}
			else
				System.out.println("connection non établie opu cassée");
		}
			catch (SQLException ei) {
				ei.printStackTrace();
			}
			catch (ClassNotFoundException ei2) {
				ei2.printStackTrace();
			}
	}
	public static void main(String[] args) 
	{
		Main test;
		Frame f = new Frame();
		f.setSize(500, 400);
		String driver = "com.mysql.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/gst93";
		test = new Main(driver, url);
		f.add(test, BorderLayout.CENTER);
		f.addWindowListener
		( 
			new WindowAdapter()
			{
				public void windowClosing(WindowEvent e)
				{
					System.exit(0);
				}			
			}
		);
		f.setVisible(true);
	}
}

[-- qwerty user --]

Hors ligne

#7 Le 05/11/2007, à 15:52

Martopioche

Re : [DEBUTANT]connexion de java à mysql ?

Et bah... Si je dois répondre... heu...

Bon.

Alors commençons par introduire que java est un langage objet. Si tu décide d'interroger une BDD pour afficher le résultat dans une IHM, l'idéal est de construire un modèle objet de tes données. Ce modèle peut très bien ne contenir qu'un seul objet qui n'est qu'une collection d'attributs et de getters/setters. Si tu ne charge qu'une table, tu est dans ce cas.

Ecrit ensuite une classe dédiée à la connexion à la base de données (on appelle ça une DAO pour data Access Object). Celle-ci aura une méthode de connexion à la base, une de déconnexion et une d'interrogation. Tu complexifiera plus tard.

Cette dernière méthode, à toi de voir quel argument elle va accepter (probablement les éléments filtre, tout ce que tu mettera derrière un "where"). Son type de retour sera une collection d'objets du modèle (un objet par ligne retournée).

Ensuite, je ne sais pas ce que tu veux faire (j'ai pas lu, je déteste lire du code quand il n'y a pas l'ombre d'un commentaire). Si tu a un bouton d'interrogation, celui-ci va déclencher cette méthode, récupérer les objets et afficher leur contenu.

Pour le comment faire, je vais pas réécrire ici ce qui existe suffisamment sur le net. Voila le support de cours d'un enseignant Java que j'ai connu et qui a de bons poly : http://www.inrialpes.fr/helix/people/genoud/ENSJAVA/M2CCI/cours.html .

Hors ligne

#8 Le 05/11/2007, à 22:02

Vincent35

Re : [DEBUTANT]connexion de java à mysql ?

Grace au driver JDBC, tu as crée ta connexion a la database, ensuite il te faut creer la requete sql et l'executer.
Pour cela, regarde du coté des prepareStatement, qui te permettent de creer des requetes, de les executer et de recuperer (si besoin) les resultats.
Tu passes la requete sous forme d'une string ou les parametres sont remplacés par un "?". Puis tu renseignes chaque ? par un paremetre avec la methode : setVariableType(int indexDu?, VariableType tonParametre)

Je te donne un exemple d'ecole de creation d'une requete et de son execution :

Creation de la connexion a la database (ici les info utilisateurs etaient stockées dans un fichier de proprietés d'ou l'emploi de l'objet "prefs") :

protected Connection getConnection() throws IOException {
		// on recupere les preferences de connexion
		prefs = Preferences.getInstance();
		//on charge l'url du serveur
		String url = "jdbc:mysql://" + prefs.getProperty("database.host") + "/"
				+ prefs.getProperty("database.name");
		//on charge le nom utilisateur
		String login = prefs.getProperty("database.username");
		//on charge le password
		String password = prefs.getProperty("database.password");
		try {
			//on charge le driver JDBC
			Class.forName("com.mysql.jdbc.Driver").newInstance();
                        //on creer la connexion
			conn = DriverManager.getConnection(url, login, password);
		} catch (Exception e) {
			System.out
					.println("Impossible de se connecter a la base de données : ");
			e.printStackTrace();

		}
		return conn;
	}

une methode ou l'on utilise un select pour charger une liste de message :

public List getMessages(String user) {
		// creation de la liste des messages
		List msgList = new ArrayList();
		// creation de la requete
		StringBuffer query = new StringBuffer("");
		query.append("Select FROM_NICK as nick, TIMESTAMP as time, MESSAGE as msg ");
		query.append("from message ");
		query.append("where TO_NICK = ?");
		try {
                        //creation du statement
			PreparedStatement prepStm = conn.prepareStatement(query.toString());
			// ajout des paremetres
			prepStm.setString(1,user);
			// execution de la requete
			ResultSet rs = prepStm.executeQuery();
			while (rs.next()) {
				// on recupere les données dans la liste
				msgList.add(rs.getString("nick") + " | "+ rs.getString("time")+ " | "+rs.getString("msg"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		deleteMessages(user);
		return msgList;
	}

et un exemple de requete du type delete :

public void deleteMessages(String user) {
		// creation de la requete
		StringBuffer query = new StringBuffer("");
		query.append("delete from message ");
		query.append("where TO_NICK = ?");
		try {
			PreparedStatement prepStm = conn.prepareStatement(query.toString());
			// ajout des paremetres
			prepStm.setString(1,user);
			// execution de la requete
			prepStm.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

nb : oui, je sais, le code est surement pas propre, pas pro, mais au moins il a le merite d'expliquer comment ca marche wink

Hors ligne

#9 Le 05/11/2007, à 22:16

x@v

Re : [DEBUTANT]connexion de java à mysql ?

La classes préférences ou je peux en trouver la description en fr ?
        // on recupere les preferences de connexion
        prefs = Preferences.getInstance();

Pourquoi mettons protected à la connection, sa ne serai pas une sécutité ?

J'ai pas tiker ton explication sur le point d'interro ?

Tu mets la requette dans une variable de type StringBuffer, comment je peux avoir des infos sur cette classe ou un tuto ?

Merci

Le lien des cours semble bien fait...:)

PS : quoi qu'il en soit ton article me permets de voir un résultat probant, mal ou bien écrit sa me laisse perplexe !

Dernière modification par x@v (Le 05/11/2007, à 22:24)


[-- qwerty user --]

Hors ligne

#10 Le 05/11/2007, à 22:35

Vincent35

Re : [DEBUTANT]connexion de java à mysql ?

La classe preferences est une classe que j'ai developpé (elle charge juste le fichier de proprietés). Mais dans un premier temps, ne te prends pas la tete avec cela, et remplace les "prefs.getProperties()" par la valeur en dur. Par exemple :

url = "jdbc:mysql://urlDuServeur/nomDeTaBase";

Pour le coup du ? cela permet de passer un parametre dans ta requete SQL.

par exemple, je veux selectionner dans la table "user" le nom et le prenom de tous les utilisateurs dont le nom est "toto" (toto pouvant etre une variable de ton application)

la requete serait donc :

SELECT nom, prenom FROM user WHERE nom = "toto"

pour t'affranchir du passage de parametre, tu remplaces ce parametre par un ?

SELECT nom, prenom FROM user WHERE nom = ?

puis, tu appeles la methode "setString()" (car notre "toto" est de type String, mais il existe l'equivalent pour les autres types)

setString prends comme parametre :
- l'index du ? (dans le cas ou tu en as plusieurs, cela commence a 1)
- le parametre a passer

Donc, dans notre exemple ca donnera :

setString(1,"toto");

Dernière modification par Vincent35 (Le 05/11/2007, à 22:36)

Hors ligne

#11 Le 07/11/2007, à 22:40

x@v

Re : [DEBUTANT]connexion de java à mysql ?

merci, pour ton aide smile


[-- qwerty user --]

Hors ligne

#12 Le 08/11/2007, à 13:21

bartalaba

Re : [DEBUTANT]connexion de java à mysql ?

connection , manip reussie , 10000 merci big_smile:D

Hors ligne

#13 Le 15/11/2007, à 12:56

x@v

Re : [DEBUTANT]connexion de java à mysql ?

@bartalaba
j'ai ouvert un forum java pour ma classe tu peux venir histoire de se partager sources, connaissance...
http://courant-alternatif.org/forum_j2ee/index.php


[-- qwerty user --]

Hors ligne