driver MySql - Java - Programmation
Marsh Posté le 04-05-2004 à 10:29:59
tu te trompe de driver : le driver que tu utilises utilise la classe 'com.mysql.jdbc.Driver', comme c'est marqué dans la documentation : http://dev.mysql.com/doc/connector/j/en/#id2801034
Remarque : ton newInstance() ne sert à rien.
Marsh Posté le 04-05-2004 à 12:56:55
j'ai deja essayer...j'ai changer de librairie, j'ai tout essayer et rien...je suis donc revenu a la librairie :
mysql-connector-java-3.0.11-stable-bin et je sais plus quoi faire...
j'ai tjs le code :
try {
//etablissement de la connexion
Class.forName("com.mysql.jdbc.Driver" );
String user = "test";
String password = "test";
String url = "jdbc:mysql://localhost:3306/crm";
Connection con = DriverManager.getConnection(url,user,password);
//fermeture de la connexion
con.close();
//fin du try
return true;
}
catch (Exception e) {
e.getStackTrace();
return false;
}
mais pas moyen: en pas a pas je tombe tjs sur la class NonRegisteringDriver, et le truc c'est ke je suis bloque sur un commentaire quand je passe sur la fonction driverManager.getconnection(...). je comprend rien...et ca commence a me prendre la tete surtout ke je suis obligé d'utiliser ce genre de base...
si qqun peut me renseigner je suis en attente d'un sauveur!
merci tout de meme.
Hermes(84)
Marsh Posté le 04-05-2004 à 14:11:45
c'est quoi ton histoire de classe NonRegisteringDriver ?
Donne nous le message d'erreur ...
Marsh Posté le 04-05-2004 à 14:56:34
en fait ya pas de message d'erreur, qd je le lance normalement il "rame" un peu et n'affiche rien et qd je le lance en mode debug, qd j'arrive sur la ligne :
Connection con = DriverManager.getConnection(url,user,password);
il "saute" dans la classe:
// JBuilder API Decompiler stub source generated from class file
// 4 mai 2004
// -- implementation of methods is not available
package com.mysql.jdbc;
// Imports
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverPropertyInfo;
import java.sql.SQLException;
import java.util.Properties;
public class NonRegisteringDriver implements Driver {
// Fields
public static final boolean DEBUG = false;
public static final boolean TRACE = false;
// Constructors
public NonRegisteringDriver() throws SQLException { }
// Methods
public int getMajorVersion() { return 0;}
public int getMinorVersion() { return 0;}
public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException { return null;}
public boolean acceptsURL(String url) throws SQLException { return false;}
public Connection connect(String url, Properties info) throws SQLException { return null;}
public String database(Properties props) { return null;}
public String host(Properties props) { return null;}
public boolean jdbcCompliant() { return false;}
public int port(Properties props) { return 0;}
public String property(String name, Properties props) { return null;}
static int getMajorVersionInternal() { return 0;}
static int getMinorVersionInternal() { return 0;}
Properties parseURL(String url, Properties defaults) throws SQLException { return null;}
private static int safeIntParse(String intAsString) { return 0;}
et qd je suis la dedans je bloque sur la premiere ligne du premier commentaire...
j'ai fait pas mal de sites et j'avouerai que j'ai pas vu de probleme similaire. et je viens encore de verifier le jar qui est bien dans le classpath...
je desespere mais j'essaye tjs...
a+
Marsh Posté le 04-05-2004 à 18:41:45
hermes84 a écrit : en fait ya pas de message d'erreur, qd je le lance normalement il "rame" un peu et n'affiche rien |
ben essaye de lancer une requête sur ta base pour voir ce que ca te dis ...
Sinon, c'est normal qu'en mode debug il ne puisse pas te placer sur la bonne ligne. Pour ca il faudrait que tu aies les sources du driver mySQL. Là ce qu'il t'affiche c'est la version décompilée de la classe.
Marsh Posté le 04-05-2004 à 19:20:03
à propos faudra un jour qu'on m'explique pourquoi tous les tutos font un Class.forName sans expliquer pourquoi au lieu de faire un DriverManager.register-machin qui est plus explicite et propre..
Marsh Posté le 04-05-2004 à 19:42:01
the real moins moins a écrit : à propos faudra un jour qu'on m'explique pourquoi tous les tutos font un Class.forName sans expliquer pourquoi au lieu de faire un DriverManager.register-machin qui est plus explicite et propre.. |
parce que si je me trompe pas, le register-machin prend en paramêtre une classe => il faut construire la classe => on générale faire un new le.Driver() => mettre en dur le nom de la classe => c'est pas paramétrable de façon externe (dans un fichier de properties ou autre).
Et puis ca fait partie des spécifs JDBC que le chargement de la classe Driver enregistre le driver si c'est pas déjà fait.
Mais je suis d'accord avec toi. C'est pas clair. Perso c'est en cherchant à quoi servait ce truc que j'ai découvert l'existence des blocs static en java
Marsh Posté le 04-05-2004 à 19:47:02
ben registerDriver(Class.forName("blah" ).new Instance())
me paraitrait plus logique quoi... je vois pas pq "ca fait partie des spécifs JDBC que le chargement de la classe Driver enregistre le driver si c'est pas déjà fait."
C'est dans le code des drivers qu'ils doivent mettre un bloc static pour faire ça?
Marsh Posté le 04-05-2004 à 19:51:35
the real moins moins a écrit : ben registerDriver(Class.forName("blah" ).new Instance()) |
nan mais moi je suis d'accord, mais là, en même temps tu construis et enregistre le drivers à chaque execution de cette ligne, alors qu'avec le Class.forName(), ca le fait qu'une fois ...
moi j'aurais bien vu un registerDriver("la classe du driver" ), qui lui fait le Class.forName (ou autre chose). Ca aurait été plus clair ...
the real moins moins a écrit : |
bha oui, sinon comment veux-tu que ca marche ?
Marsh Posté le 04-05-2004 à 20:00:12
benou a écrit : nan mais moi je suis d'accord, mais là, en même temps tu construis et enregistre le drivers à chaque execution de cette ligne, alors qu'avec le Class.forName(), ca le fait qu'une fois ... |
ou une méthode register qui prend un Class
bah d'un autre côté, tu ne registerais ton driver qu'au demarrage de ton appli et ça serait reglé.
benou a écrit : |
non mais j'ai compris mais je trouve ça un peu chelou comme spec
Marsh Posté le 04-05-2004 à 20:02:02
the real moins moins a écrit : ou une méthode register qui prend un Class |
bha, tant qu'à faire, autant éviter de passer par un Class : ca évite une opération "troublante" pour les débutants
Marsh Posté le 04-05-2004 à 20:14:10
bah et le Class.forname qui ne fait rien c'est pas troublant?
et puis bon s'il fallait tout faire en fonction des débutants, on ferait du logo
Marsh Posté le 04-05-2004 à 22:03:51
the real moins moins a écrit : bah et le Class.forname qui ne fait rien c'est pas troublant? |
je t'ai déjà dit que j'étais d'accord avec toi la dessus
Marsh Posté le 04-05-2004 à 10:18:40
bonjour,
j'essaie de me connecter a une base de donnees MySql en local. Je pense avoir correctement incorporé la bibliotheque (mysql-connector-java-3.0.11-stable-bin.jar) dans le projet mais quand j'execute en pas à pas, je tombe dans une classe NonRegisteringDriver...
Le code que j'utilise, je l'ai repris sur le site et je ne pense pas qu'il y ai de problemes...
Le truc c'est qu'il y en a un, mais quoi?
Class.forName("org.gjt.mm.mysql.Driver" ).newInstance();
String url = "jdbc:mysql://localhost:3306/table";
String user = "user";
String password = "pass";
Connection con = DriverManager.getConnection(url,user,password);
si qqun peut maider...merci d'avance.
hermes(84).