Pages : 1
#1 Le 22/05/2010, à 20:42
- anix
[Résolu] java mysql
quels sont les conditions nécessaires pour faire une connexion java et mysql
c'est à dire qu'est ce qu'il faut que j'installe pour faire cette connexion
j'ai ubuntu 10.04, j'ai installé mysql et phpmyadmin et j'ai essayé de faire une connexion java avec mysql et ça ne marche pas chez moi
merci d'avance pour les réponses
Dernière modification par anix (Le 25/05/2010, à 20:48)
Hors ligne
#2 Le 22/05/2010, à 22:41
- Respawner
Re : [Résolu] java mysql
Il te faut le connector qui va bien pour ouvrir une connexion avec le serveur MySQL. Ce que tu cherches se trouve ici.
Hors ligne
#3 Le 22/05/2010, à 22:48
- anix
Re : [Résolu] java mysql
merci
Hors ligne
#4 Le 23/05/2010, à 21:31
- anix
Re : [Résolu] java mysql
merci mais je n'ai pas sû comment utiliser le connector
est-ce que tu saurais comment faire pour la connexion
merci d'avance
Hors ligne
#5 Le 23/05/2010, à 23:34
- alexduf
Re : [Résolu] java mysql
as-tu lu la documentation fournie avec le driver mysql ?
C'est plutot bien décri il me semble
Hors ligne
#6 Le 24/05/2010, à 18:38
- anix
Re : [Résolu] java mysql
non, je ne l'ai pas compris
est-ce que vous avez un éclaircissement
merci d'avance
Hors ligne
#7 Le 24/05/2010, à 22:49
- alexduf
Re : [Résolu] java mysql
commence par nous dire où tu bloques alors.
Hors ligne
#8 Le 25/05/2010, à 12:59
- anix
Re : [Résolu] java mysql
voici mon code java:
String pilote = "com.mysql.jdbc.Driver";
try{
Class.forName(pilote);
Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/ris","root","");
System.out.println(connexion);
Statement instruction = connexion.createStatement();
System.out.println(instruction);
String cmdInsert="INSERT INTO `ris`.`patient` (`identifiant`, `nom`, `prenom`, `sexe`, `date_de_naissance`) " +
"VALUES ('"+id.getText()+"', '"+nom.getText()+"' ,'"+prenom.getText()+"' ,'"+sexe.getText()+"' ,'"+dateNais.getText()+"' )";
System.out.println(cmdInsert);
try {
boolean resultat2 = instruction.execute(cmdInsert);
}
catch (Exception e)
{
System.err.println("mauvais insert");
}
instruction.close();
}
catch (Exception e)
{
System.err.println("mauvais pilote");
}
j'ai installé phpmyadmin et il marche sans problémes
j'ai mit le jar du mysql-connector dans libraries de netbeans
j'ai mit aussi le chemin du mysql-connector dans le CLASSPATH dans le .profile
mais toujours il me sort le message "mauvais pilote"
est-ce que vous avez une idée quoi faire
merci d'avance
Hors ligne
#9 Le 25/05/2010, à 13:47
- alexduf
Re : [Résolu] java mysql
mais toujours il me sort le message "mauvais pilote"
est-ce que vous avez une idée quoi fairemerci d'avance
D'après ton code, cela signifie qu'il passe toujours dans ton catch. Ce qui siginifie qu'il y a une exception qui remonte systématiquement. Le problème c'est que tu n'affiche aucune information sur ton exception.
transforme donc ton
catch (Exception e)
{
System.err.println("mauvais pilote");
}
en
catch (Exception e)
{
e.printStackTrace();
System.err.println("mauvais pilote");
}
relance ton code, et regarde quelle exception sort (et à quelle ligne). Si tu ne vois pas, cherche un peu à partir du nom de l'exception sur google, si tu ne trouves toujours pas, reviens poser une question ici ^^
J'ai aussi vu ta façon de passer des paramètres à une requête, c'est pas du tout élégant, quand tu auras résolu ton premier problème il faudra que tu jettes un oeil à la classe PreparedStatement. Pareil, si tu comprends pas, pose une question.
Bonne continuation
Hors ligne
#10 Le 25/05/2010, à 14:22
- anix
Re : [Résolu] java mysql
merci alexduf
Hors ligne
#11 Le 25/05/2010, à 16:38
- anix
Re : [Résolu] java mysql
voici l'erreur
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at ris1.Ris1View.ValiderActionPerformed(Ris1View.java:299)
at ris1.Ris1View.access$800(Ris1View.java:24)
at ris1.Ris1View$4.actionPerformed(Ris1View.java:151)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)
at java.awt.Component.processMouseEvent(Component.java:6108)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:5873)
at java.awt.Container.processEvent(Container.java:2105)
at java.awt.Component.dispatchEventImpl(Component.java:4469)
at java.awt.Container.dispatchEventImpl(Container.java:2163)
at java.awt.Component.dispatchEvent(Component.java:4295)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
at java.awt.Container.dispatchEventImpl(Container.java:2149)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4295)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
mauvais pilote
je n'ai pas trouvé dans internet quelque chose d'intéressant
Hors ligne
#12 Le 25/05/2010, à 16:40
- funkalee
Re : [Résolu] java mysql
jdbc:mysql://localhost:3306/ris avec le numéro de port c'est mieux
ajoute le jar du driver dans la bibliothèque de ton IDE ensuite tu l'ajoutera a ton projet par l'IDE, si tu code avec blocnote ou gedit, alors.... allons cueillir des cerises
PS: quand tu donne du code, met tout le code.... du package a la derniere ligne, on sait meme pas si tu as importé les classes nécessaire
Dernière modification par funkalee (Le 25/05/2010, à 16:48)
Hors ligne
#13 Le 25/05/2010, à 16:40
- anix
Re : [Résolu] java mysql
anix a écrit :mais toujours il me sort le message "mauvais pilote"
est-ce que vous avez une idée quoi fairemerci d'avance
D'après ton code, cela signifie qu'il passe toujours dans ton catch. Ce qui siginifie qu'il y a une exception qui remonte systématiquement. Le problème c'est que tu n'affiche aucune information sur ton exception.
transforme donc ton
catch (Exception e) { System.err.println("mauvais pilote"); }
en
catch (Exception e) { e.printStackTrace(); System.err.println("mauvais pilote"); }
relance ton code, et regarde quelle exception sort (et à quelle ligne). Si tu ne vois pas, cherche un peu à partir du nom de l'exception sur google, si tu ne trouves toujours pas, reviens poser une question ici ^^
J'ai aussi vu ta façon de passer des paramètres à une requête, c'est pas du tout élégant, quand tu auras résolu ton premier problème il faudra que tu jettes un oeil à la classe PreparedStatement. Pareil, si tu comprends pas, pose une question.
Bonne continuation
c'est quoi la classe PreparedStatement ?
Hors ligne
#14 Le 25/05/2010, à 16:42
- anix
Re : [Résolu] java mysql
jdbc:mysql://localhost:3306/ris avec le numéro de port c'est mieux
je n'ai pas comprit
Hors ligne
#15 Le 25/05/2010, à 17:03
- funkalee
Re : [Résolu] java mysql
voici un code que j'ai recupreré il y a matiere a comprendre et il est utilisable
//ExecuteSQL.java
import java.sql.*;
import java.io.*;
//argument de ligne de commande
//-d com.mysql.jdbc.Driver -u User -p Psswd jdbc:mysql://localhost:3306/database
/**
* Un interpreteur SQL générique.
* ligne de commande
* Usage: java ExecuteSQL$SQLConsole [-d <driver>] "
+ "[-u <user>] [-p <password>] <database URL>
*
**/
public class ExecuteSQL {
/**
* Cette méthode tente d'afficher le contenu d'un objet ResulSet dans
* un tableau. Elle se base sur la classe ResultSetMetaData. Une bonne
* partie du code ne s'occupe que de la manipulation de chaîne de
* caractères.
* @param rs
* @param output
* @throws SQLException
*/
static void printResultsTable(ResultSet rs, OutputStream output)
throws SQLException {
// Configure le flux de sortie
PrintWriter out = new PrintWriter(output);
// Récupère quelques "meta-données" (noms de colonnes, etc.)
// concernant les résultats.
ResultSetMetaData metadata = rs.getMetaData();
// Variables contenant des données importants à propos des
// tableaux à afficher.
int numcols = metadata.getColumnCount(); // nombre de colonnes
String[] labels = new String[numcols]; // étiquettes des colonnes
int[] colwidths = new int[numcols]; // leur taille(largeur)
int[] colpos = new int[numcols]; // position de départ
int linewidth; // taille total de la table
// Détermine la largeur des colonnes, le point de départ de
// chacune d'elles, la largeur de chaque lignes du tableau, etc.
linewidth = 1; // pour le caractère '|' initial.
for (int i = 0; i < numcols; i++) { // pour chaque colonnes
colpos[i] = linewidth; // enregistre la position
labels[i] = metadata.getColumnLabel(i + 1); // récupere son étiquette
// Get the column width. If the db doesn't report one, guess
// 30 characters. Then check the length of the label, and use
// it if it is larger than the column width
// Récupere la largeur de la colonne. Si la BD ne fournit pas
// cette information, utilise une largeur par défaut de 30
// caractères. Contrôle ensuite la longueur de l'étiquette et
// utilise cette longueur si elle est supérieur à la largeur
// de la colonne.
int size = metadata.getColumnDisplaySize(i + 1);
if (size == -1) {
size = 30; // certains drivers retourne -1...
}
if (size > 500) {
size = 30; // N'autorise pas de tailles non raisonnable
}
int labelsize = labels[i].length();
if (labelsize > size) {
size = labelsize;
}
colwidths[i] = size + 1; // Enregistre la taille de la colonne
linewidth += colwidths[i] + 2; // incrémente la taille total
}
// Crée une ligne séparatrice horizontale. Crée également une
// ligne vide representant la valeur initiale de chaque ligne du
// tableau.
StringBuffer divider = new StringBuffer(linewidth);
StringBuffer blankline = new StringBuffer(linewidth);
for (int i = 0; i < linewidth; i++) {
divider.insert(i, '-');
blankline.insert(i, " ");
}
// Place des marques spéciales dans la ligne séparatrice, aux
// positions correspondant aux colonnes.
for (int i = 0; i < numcols; i++) {
divider.setCharAt(colpos[i] - 1, '+');
}
divider.setCharAt(linewidth - 1, '+');
// Commence le tableau d'affichage par une ligne séparatrice
out.println(divider);
// La ligne suivante contient les étiquettes des colonnes.
// Commence par une ligne vide, puis insere les noms des colonnes
// et les caractères "|" de séparation des colonnes. La méthode
// overwrite() est définie ci-dessous.
StringBuffer line = new StringBuffer(blankline.toString());
line.setCharAt(0, '|');
for (int i = 0; i < numcols; i++) {
int pos = colpos[i] + 1 + (colwidths[i] - labels[i].length()) / 2;
overwrite(line, pos, labels[i]);
overwrite(line, colpos[i] + colwidths[i], " |");
}
// Affiche les étiquettes des colonnes, puis insère une nouvelle
// ligne séparatrice
out.println(line);
out.println(divider);
// Affiche les données dans le tableau. Boucle sur l'objet
// ResultSet avec la méthode next() pour extraire les lignes
// les unes après les autres. Extrait la valeur de chaque colonne
// en utilisant la méthode getObject() et affiche, comme nous
// l'avons fait avec les étiquettes des colonnes, ci-dessus.
while (rs.next()) {
line = new StringBuffer(blankline.toString());
line.setCharAt(0, '|');
for (int i = 0; i < numcols; i++) {
Object value = rs.getObject(i + 1);
if (value != null) {
overwrite(line, colpos[i] + 1, value.toString().trim());
}
overwrite(line, colpos[i] + colwidths[i], " |");
}
out.println(line);
}
// Enfin, achève le tableau avec une dernière ligne séparatrice.
out.println(divider);
out.flush();
}
/**
* Cette méthode utilitaire est utilisée lors de l'affichage du
* tabelau des résultats.
* @param b
* @param pos
* @param s
*/
static void overwrite(StringBuffer b, int pos, String s) {
int slen = s.length(); // taille de la chainestring length
int blen = b.length(); // taille de la chaine tampon buffer
if (pos + slen > blen) {
slen = blen - pos; // Y a-t-il assez de place?
}
for (int i = 0; i < slen; i++) { // copy la chaine dans le buffer
b.setCharAt(pos + i, s.charAt(i));
}
}
public static class SQLConsole {
public static void main(String[] args) {
// Notre connexion jdbc au serveur de bases de données
Connection conn = null;
try {
String driver = null, url = null, user = "", password = "";
// Analyse tous les arguments de la ligne de commande
for (int n = 0; n < args.length; n++) {
if (args[n].equals("-d")) {
driver = args[++n];
} else if (args[n].equals("-u")) {
user = args[++n];
} else if (args[n].equals("-p")) {
password = args[++n];
} else if (url == null) {
url = args[n];
} else {
throw new IllegalArgumentException("Unknown argument.");
}
}
// Le seul argument requis est l'URL de la base de données.
if (url == null) {
throw new IllegalArgumentException("No database specified");
}
// Si l'utilisateur a spécifié un nom de classe pour le driver
// de BD, charge dynamiquement cette classe. Ce procedé donne
// au driver l'opportunité de s'enregistrer auprès du
// gestionnaire DriverManager.
if (driver != null) {
Class.forName(driver);
}
// Établit une connexion avec la base de données spécifiée, en
// utilisant le nom d'utilisateur et le mot de passe
// éventuellement spécifiés par l'utilisateur. Le gestionnaire
// de driver teste tous les pilotes de BD qu'il connaît afin
// d'analyser l'URL et se connecter au serveur de BD.
conn = DriverManager.getConnection(url, user, password);
// Crée l'instruction que nous utiliserons pour parler à la BD
Statement s = conn.createStatement();
// Récupere un flux permettant de lire à partir de la console
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
// Entre dans une boucle infinie qui lit les requête de
// l'utilisateur
while (true) {
System.out.print("sql> "); // interroge l'utilisateur
System.out.flush(); // affiche l'invite de commandes
String sql = in.readLine(); // lit l'entrée de l'utilisateur
// Quitte lorsque l'utilisateur tape "quit".
if ((sql == null) || sql.equals("quit")) {
break;
}
// Ignore les lignes vides
if (sql.length() == 0) {
continue;
}
// Éxécute l'instruction SQL de l'utilisateur et affiche
// les résultats.
try {
// Nous ne savons pas si il s'agit d'une requête ou
// d'une forme de mise à jour, aussi utilisons-nous la
// méthode execute() plutot que la méthode
// executeQuery() ou executeUpdate(). Si la valeur de
// retour est vraie, alors il s'agissait d'une
// requête, sinon d'une mise à jour.
boolean status = s.execute(sql);
// Certaines requêtes SQL complexes peuvent retourner
// plus d'un ensemble de résultats, aussi bouclons-nous
// jusqu'à ce qu'il n'y ait plus de résultat.
do {
// il s'agissait d'une requête et nous retournons
// un objet ResultSet
if (status) { // it was a query and returns a ResultSet
ResultSet rs = s.getResultSet(); // Résultats
printResultsTable(rs, System.out); // Affichage
} else {
// Si la commande éxécutée representait
// une mise à jour plutôt qu'une requête, alors
// la méthode ne retourne pas un objet ResultSet.
// Nous affichons seulement le nombre de lignes
// concernées
int numUpdates = s.getUpdateCount();
System.out.println("Ok. " + numUpdates
+ " rows affected.");
}
// Vérifie qu'il n'y a plus de résultats à
// afficher, ou affiche les résultats restants en
// utlisant une boucle.
status = s.getMoreResults();
} while (status || s.getUpdateCount() != -1);
} // Si une exception SQLException est levée, affiche un
// message d'erreur. Notez que les exceptions SQLException
// peuvent avoir un message général ainsi qu'un message
// spécifique à la BD, retourné par getSQLState()
catch (SQLException e) {
System.err.println("SQLException: " + e.getMessage() + ":"
+ e.getSQLState());
} // À chaque passage dans la boucle, vérifie qu'il n'y a
// pas eu d'avertissements. Notez qu'il peut y avoir une
// chaîne entière d'avertissements.
finally { // affiche les avertissements
SQLWarning w;
for (w = conn.getWarnings(); w != null; w = w.getNextWarning()) {
System.err.println("WARNING: " + w.getMessage()
+ ":" + w.getSQLState());
}
}
}
} // Gère les exceptions qui se produisent durant l'analyse des
// arguments, la configuration, etc. Affiche les détails des
// SQLException.
catch (Exception e) {
System.err.println(e);
if (e instanceof SQLException) {
System.err.println("SQL State: "
+ ((SQLException) e).getSQLState());
}
System.err.println("Usage: java ExecuteSQL [-d <driver>] "
+ "[-u <user>] [-p <password>] <database URL>");
} // Vérifie que la connexion à la base de données est toujours
// refermée avant de quitter, soit parce que l'utilisateur a entré
// la commande 'quit', soit parce qu'une exception a été levée
// durant la configuration. La fermeture de cette connexion ferme
// implicitement toutes les instructions ouvertes et les ensembles
// de résultats associés.
finally {
try {
conn.close();
} catch (Exception e) {
}
}
}
}
}
Hors ligne
#16 Le 25/05/2010, à 18:02
- alexduf
Re : [Résolu] java mysql
Bon alors, un problème à la fois :
ClassNotFoundException : si t'es pas anglophone ça veut dire grosso modo "au secours il me manque une classe". La classe qui manque en l'occurence, c'est le driver.
Donc tu as un problème de classpath. Je devance un question probable "c'est quoi le classpath". Là je t'invite à faire un tour sur le net pour trouver ta réponse.
D'ailleurs tu trouveras tout ce qu'il te faut ici : http://www.siteduzero.com/tutoriel-3-119257-se-connecter-a-sa-bdd.html
Hors ligne
#17 Le 25/05/2010, à 18:43
- anix
Re : [Résolu] java mysql
merci
Hors ligne
#18 Le 25/05/2010, à 19:00
- anix
Re : [Résolu] java mysql
j'ai bien changé le classpath dans le .profile
ça ne marche pas
Hors ligne
#19 Le 25/05/2010, à 19:27
- funkalee
Re : [Résolu] java mysql
apprend a te servir un peu plus de eclipse ou netbeans, c'est ca ton vrai probleme et pas le classpath
Hors ligne
#20 Le 25/05/2010, à 19:35
- anix
Re : [Résolu] java mysql
j'ai bien chagé le classpath dans netbeans à l'aide de TOOLS/LIBRARIES
ça ne marche pas
Hors ligne
#21 Le 25/05/2010, à 20:30
- funkalee
Re : [Résolu] java mysql
dans netbeans tu ajoute une nouvelle libraire en définissant un nom pour ta librairie et surtout le chemin des classes, qui sont souvent dans des jar, ensuite tu click droit sur ton projet et propriété de ton projet et tu vas dans la section librairie et la tu ajoute la librairie a ton projet
le driver mysql est fournis avec netbeans donc je te montre pas comment ajouter une librairie
mais pour ajouter une librairie a ton projet voici ce que tu peux faire
Dernière modification par funkalee (Le 25/05/2010, à 20:31)
Hors ligne
#22 Le 25/05/2010, à 20:33
- anix
Re : [Résolu] java mysql
merci
Hors ligne
#23 Le 25/05/2010, à 20:42
- funkalee
Re : [Résolu] java mysql
si c'est résolu oublie pas de le mettre dans le titre
Hors ligne
#24 Le 25/05/2010, à 20:48
- anix
Re : [Résolu] java mysql
1000 mercis funkalee
ça marche enfin
Hors ligne
#25 Le 25/05/2010, à 22:36
- alexduf
Re : [Résolu] java mysql
punaise, les captures d'écran et tout ! Si ça c'est pas de la gentillesse !
Hors ligne
Pages : 1