#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
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
[-- qwerty user --]
Hors ligne
#12 Le 08/11/2007, à 13:21
- bartalaba
Re : [DEBUTANT]connexion de java à mysql ?
connection , manip reussie , 10000 merci :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