No suitable Driver !

No suitable Driver ! - Java - Programmation

Marsh Posté le 04-10-2005 à 00:38:37    

Bonsoir,
 
  Je suis en train d'atteindre des sommets cosmiques de délire !
  Je me bat avec JDBC !
 
  J'ai une classe Test1 dans laquelle je fait tout plein de Statements et de ResultSets tout en me connectant au serveur de la base MySQL sans souci :
 

Code :
  1. package tp1;
  2. import java.sql.*;
  3. import java.util.*;
  4. import java.text.*; // pour formater la date
  5. import java.io.*;
  6. public class Test1 {
  7.     public static void main(String[] args)
  8.     throws SQLException, ClassNotFoundException, IOException {
  9.         // Charge le driver
  10.         //Class.forName("com.mysql.jdbc.Driver" );
  11.         // Un exemple à ne pas suivre : mettre le mot de passe en dur         
  12.         //Connection conn =
  13.         //DriverManager.getConnection("jdbc:mysql://localhost/entreprise?user=xxxx&password=xxxxxxx" );
  14.        
  15.         String nomFichierConfig = "FichierConfig.txt";
  16.        
  17.         Connection conn = ConfigConnection.getConnection(nomFichierConfig);
  18.        
  19.         Statement stmt = conn.createStatement();       
  20.        
  21.         ResultSet rset = stmt.executeQuery("SELECT nome, datemb FROM emp "
  22.                 + "ORDER BY nome" );
  23.        
  24.         // Juste pour tester un bug du driver Oracle : le nom de la table est vide
  25.         System.out.println("Nom de la table : "
  26.                 + rset.getMetaData().getTableName(1));
  27.         System.out.println("Type de la colonne  : "
  28.                 + rset.getMetaData().getColumnType(1));
  29.         System.out.println("Nom de la colonne : "
  30.                 + rset.getMetaData().getColumnName(1));
  31.        
  32.         // Récupère les données
  33.         while (rset.next()) {
  34.             System.out.print(rset.getString(1));
  35.             java.sql.Date datemb = rset.getDate(2);
  36.             if (! rset.wasNull()) {
  37.                 // Un peu d'exercice sur les dates en français ne fait pas de mal...
  38.                 String datembF =
  39.                         DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.FRANCE).format(datemb);
  40.                 SimpleDateFormat formateur =
  41.                         (SimpleDateFormat)DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.FRANCE);
  42.                 formateur.applyPattern("MMMM" ); // configure le formateur pour avoir
  43.                 // le mois en lettres (avec plus de
  44.                 // 3 lettres (car plus de 3 M)
  45.                 String mois = formateur.format(datemb);
  46.                 System.out.println(" embauché le : " + datembF);
  47.                 System.out.println("Au mois de " + mois);
  48.             } else
  49.                 System.out.println();
  50.         }
  51.        
  52.         // Modification d'une date d'embauche pour tester la syntaxe spéciale
  53.         int nbLignesModifiees = stmt.executeUpdate("UPDATE emp "
  54.                 + "SET datemb = {d '1998-01-22'}"
  55.                 + "WHERE nome = 'VILLARD'" );
  56.         System.out.println(nbLignesModifiees + " lignes modifiees" );
  57.         rset = stmt.executeQuery("SELECT nome, datemb FROM emp "
  58.                 + "WHERE nome = 'VILLARD'"
  59.                 + "ORDER BY nome" );
  60.         rset.next();
  61.         System.out.println("Villard a ete embauche le "
  62.                 + rset.getDate(2));
  63.        
  64.     }
  65. }


 
Et pour ne pas laisser le mot de passe en dur j'ai une classe ConfigConnection qui a une methode statique qui permet de lire un fichier (ou y a les infos pour se connecter genre driver = ... url = ...) et renvoie une Connection
 

Code :
  1. package tp1;
  2. import java.sql.*;
  3. import java.io.*;
  4. import java.util.*;
  5. public class ConfigConnection {
  6.  
  7.   private ConfigConnection() { }
  8.   /**
  9.    * Obtenir une connexion à partir des infos qui sont
  10.    * dans un fichier de propriétés.
  11.    * Le fichier doit contenir les propriétés driver, url,  
  12.    * utilisateur, mdp (mot de passe)
  13.    * @param nomFichierProp nom du fichier de propriétés
  14.    * @return une connexion à la base
  15.    */
  16.  
  17.   public static Connection getConnection(String nomFichierProp)
  18.     throws IOException, ClassNotFoundException, SQLException {
  19.     Properties props = new Properties();
  20.     BufferedInputStream bis =
  21.       new BufferedInputStream(new FileInputStream(nomFichierProp));
  22.     props.load(bis);
  23.     String driver = props.getProperty("driver" );
  24.     String url = props.getProperty("url" );
  25.     String utilisateur = props.getProperty("utilisateur" );
  26.     String mdp = props.getProperty("mdp" );
  27.     bis.close();
  28.     Class.forName(driver);
  29.     return DriverManager.getConnection(url, utilisateur, mdp); 
  30.   }
  31.   /**
  32.    * Obtenir une connexion à partir des infos qui sont
  33.    * dans un fichier de propriétés, du nom d'utilisateur
  34.    * et du mot de passe passés en paramètre
  35.    * Le fichier doit contenir les propriétés driver, url.
  36.    * @param nomFichierProp nom du fichier de propriétés.
  37.    * @param utilisateur nom de l'utilisateur.
  38.    * @param mdp mot de passe de l'utilisateur.
  39.    * @return une connexion à la base.
  40.    */
  41.   public static Connection getConnection(String nomFichierProp,
  42.      String utilisateur,
  43.      String mdp)
  44.     throws IOException, ClassNotFoundException, SQLException {
  45.     Properties props = new Properties();
  46.     BufferedInputStream bis =
  47.       new BufferedInputStream(new FileInputStream(nomFichierProp));
  48.     props.load(bis);
  49.     String driver = props.getProperty("driver" );
  50.     String url = props.getProperty("url" );
  51.     bis.close();
  52.     Class.forName(driver);
  53.     return DriverManager.getConnection(url, utilisateur, mdp);
  54.   }
  55.    
  56. }


 
Et voila mon petit script xml pour faire marcher tout ça :
 

Code :
  1. <property name="src.dir" value="src"/>
  2.    <property name="build.dir" value="build"/>
  3.    <property name="classes.dir" value="build/classes"/>
  4.    <property name="main-class" value="tp1.Test1"/>
  5.    <property name="driver" value="mysql-connector-java-3.1.10-bin.jar"/>
  6.  
  7.    <target name="maMegaTache">
  8.  <!-- création d'un répertoire pour la compilation -->
  9.  <mkdir dir="${build.dir}"/>
  10.                
  11.                
  12.                 <!-- création d'un répertoire pour la compilation -->
  13.  <mkdir dir="${classes.dir}"/>
  14.                
  15.  <!-- compilation des sources Java -->
  16.  <javac srcdir="${src.dir}" destdir="${classes.dir}">
  17.                     <classpath path="${driver}"/>
  18.                 </javac>
  19.                 <echo message="FUCK"/>
  20.                
  21.  <!-- exécution du code compilé -->
  22.                 <java classname="${main-class}" fork="true">
  23.                     <classpath path="${classes.dir}"/>
  24.                     <classpath path="${driver}"/>
  25.                 </java>
  26. </target>


 
Et a l'execution de cette petite tache j'ai un ptain de :
 

Code :
  1. maMegaTache:
  2. FUCK
  3. Exception in thread "main" java.sql.SQLException: No suitable driver
  4.         at java.sql.DriverManager.getConnection(DriverManager.java:545)
  5.         at java.sql.DriverManager.getConnection(DriverManager.java:171)
  6.         at tp1.ConfigConnection.getConnection(Unknown Source)
  7.         at tp1.Test1.main(Unknown Source)
  8. Java Result: 1
  9. BUILD SUCCESSFUL (total time: 0 seconds)


 
Ainsi je suis en train de peter un cable de sa XXXXXX car si je passe pas par ConfigConnection .... CA MARCHE  :fou:  :fou:  :fou:  
 
Je suis donc aller voir dans la doc de MySQL et ils disent :
 
One of two things are happening. Either the driver is not in your CLASSPATH (see the "INSTALLATION"
section above), or your URL format is incorrect (see "Developing Applications with MySQL Connector/J" ).

 
 
Arborescence de mon projet :
│   FichierConfig.txt
│   Invite de commandes.lnk
|   build.xml
│   manifest.mf
│   mysql-connector-java-3.1.10-bin.jar

├───build
│   └───classes
│       └───tp1
│               ConfigConnection.class
│               Test1.class

├───dist
│       Tp1.jar

├───nbproject
│   │   build-impl.xml
│   │   genfiles.properties
│   │   project.properties
│   │   project.xml
│   │
│   └───private
│           private.properties
│           private.xml

├───src
│   └───tp1
│           .LCKTest1.java~
│           ConfigConnection.java
│           Test1.java

└───Tp1
    └───nbproject
        └───private
                private.xml
 
 
Bref c'est la memerde et je vois vraiment pas d'ou ca vient !
 
Plz help  :cry:


Message édité par Chronoklazm le 04-10-2005 à 00:46:37

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 04-10-2005 à 00:38:37   

Reply

Marsh Posté le 04-10-2005 à 01:03:22    

Bon bein voila je me suis fait avoir par l'adresse url  :sweat:  
 
jdbc:mysql:@localhost:3306:entreprise  <<<=== PAS OK !
 
jdbc:mysql://localhost:3306/entreprise  <<<=== OK !
 
 
Si jamais un jour qqun tombe sur ça ...


Message édité par Chronoklazm le 04-10-2005 à 01:03:37

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed