Bonjour a tous,

J'ai un petit problème, je souhaiterais pouvoir, via un fichier de propriétés me connecter à n'importe quelle base de données sans avoir a utiliser un classpath dans ma commande java.

Pour se faire j'ai utilise un fichier de propriétés avec ces données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
user	        = alt157
mdp	        = **********   		
base 	= mabase
url            = jdbc:postgresql://192.168.0.11/mabase
driver	= org.postgresql.Driver
jar            = /usr/share/java/postgresql.jar
Dans mon code je charge les classes de la sorte :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Enumeration;
import java.util.Properties;
import java.io.InputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.URLClassLoader;
import java.net.URL;
import java.util.jar.JarFile;
 
public class Test
{
    public static void main ( String[] args)  throws Exception
    {
        Properties prop = new Properties();        
        InputStream file = new FileInputStream("config.txt");
        prop.load(file);        
        Connection con = null;
        String url = prop.getProperty("url");
        String user = prop.getProperty("user");
        String mdp = prop.getProperty("mdp");
        String jar = prop.getProperty("jar");
        File f = new File(jar);
        URLClassLoader loader = new URLClassLoader(new URL[] { f.toURL()  } );
        JarFile leJar = new JarFile(f.getAbsolutePath());
        Enumeration I = leJar.entries();
        while ( I.hasMoreElements() ) {
            String tmp = I.nextElement().toString();
            if ( tmp.endsWith(".class") ) {
                tmp = tmp.substring(0,tmp.length()-6);
                tmp = tmp.replaceAll("/",".");
                System.out.println(tmp);
                Class.forName(tmp ,true,loader);
            }
        }
        con = DriverManager.getConnection(url, user, mdp );
   }
}
Mais cela me renvoie une erreur :
Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:postgresql://192.168.0.11/mabase
at java.sql.DriverManager.getConnection(DriverManager.java:640)
at java.sql.DriverManager.getConnection(DriverManager.java:200)
at Test.main(Test.java:40)
Je ne vois vraiment pas ou il y a un probleme, j'ai tente de mettre le retour de Class.forName dans une variable de type Class et de l'afficher a l'écran. A priori il me charge bien toutes les classes de mon .jar...

Je tiens juste a préciser que si j'utilise simplement la commande java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
java -classpath /usr/share/java/postgresql.jar:. Test
Cela fonctionne mais j'ai pas envie de m'embêter a gérer ce classpath car l'application devra être utilisable facilement et l'on devra pouvoir attaquer différentes bases sans avoir a changer le classapth ou a redémarrer l'application.

Merci d'avance a vous tous