IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

[jdbc] fichier de config


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut [jdbc] fichier de config
    Bonjour à tous,
    j'utilise la classe nommé DBManager pour me connecter à ma base de données. Les 2 mb qui nous intéresse sont :
    final private String pilote = "jdbc:oracle:thin:";
    final private String url = "@pc853:1521:maBase1";
    Seulement, j'ai codé en "dur" le chemin d'accès à ma base et on m'a demandé de mettre ds un fichier texte de config, ses 2 valeurs. Dc j'ai crée le fichier nommé "config.txt" ds lequel on a :
    pilote="jdbc:oracle:thin:";
    url="@pc853:1521:maBase1";
    j'aimerais récupérer par la suite ses 2 strings, voici le code :
    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
     
    		  try {
    			   InputStream ips=new FileInputStream("config.txt");
    			   InputStreamReader ipsr=new InputStreamReader(ips);
    			   BufferedReader br=new BufferedReader(ipsr);
    			   String[] ligne = new String[2];    ;
    			   int i = 0;
    			   while ((ligne[i]=br.readLine())!=null) 
    				   System.out.println(ligne[i]);
    				   i++;
    				   br.close();
     
     
    			   System.out.println("Pilote =>"+ligne[0]);
    			   System.out.println("URL =>"+ligne[1]);
    			  }
    			  catch (Exception e) {
    			   System.out.println(e.toString());
    			  }
    le pb est que ligne[0] et ligne[1] sont à NULL
    en espérant avoir été clair, pouvez vous m'indiquer ce qui me manque afin que je puisse récupérer les 2 string de connexion.
    Merci d'avance.

  2. #2
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    Pour faire ça tu pourrais utiliser 1 fichier "properties"

    c 1 exemble interbase. à adapter pour Oracle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    jdbc.driver= interbase.interclient.Driver
    jdbc.url=jdbc:interbase://hostname/path\\nombase.gdb
    jdbc.username=SYSDBA
    jdbc.password=masterkey
    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
     
    FileInputStream f = new FileInputStream ("NomDuFichier.properties");
    Properties p = new Properties ();
    Connection c = null;
     
    [...]
     
    p.load (f);
     
    [...]
     
    Class.forName (p.getProperty ("jdbc.driver"));
     
    [...]
     
    c = DriverManager.getConnection (p.getProperty ("jdbc.url"),
    							p.getProperty ("jdbc.username"),
    							p.getProperty ("jdbc.password") );

  3. #3
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Une remarque importante sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream f = new FileInputStream ("NomDuFichier.properties");
    Il n'est pas conseillé de lire un fichier porperties avec un FileInputStream parceque tu dois dans ce cas préciser le chemin complet vers le fichier...

    Il est préférable d'utiliser soit:

    - une classe de type ResourceBundle,
    - le méthode Class.getResourceAsStream(nomLocalDuFichier);

    il suffit alors de placer le(s) répertoire(s) de ton(tes) properties dans le classPath et le tour est joué...

    Le gros avantage est que tu n'as pas à préciser le chemin complet dans le code et que si tu change ton arborescance tu n'as que le classpath a mettre a jour...

    Ciao

    A+

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    et bien j'y suis presque.
    Je viens de créer un fichier oracle.properties :
    jdbc.driver=oracle.jdbc.driver.OracleDriver
    jdbc.pilote=jdbc:oracle:thin
    jdbc.url=jdbc:oracle:thin@pc853:1521:maBase1
    jdbc.username=system
    jdbc.password=***
    Mon applet java utilisait une classe nommée DBManager.
    Dc au lieu de conserver les membres :
    public class DBManager
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {
     
        final private String pilote = "jdbc:oracle:thin:";
    	final private String  url = "@pc853:1521:maBase1";
    ...}
    je les ai remplacé par ceci ds ma méthode :

    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
     
       public void connect( String log, String pass)
        {		  
    		try{
     
    			FileInputStream f = new FileInputStream ("oracle.properties");
    			Properties p = new Properties (); 
    			p.load (f); 
     
    		try
            {
                try{
                  //Recherche du pilote pour un SGBD Oracle
     
    		Class.forName(p.getProperty ("jdbc.driver")).newInstance();
                }//Capture de l'exception
                catch (Exception ex){
                  //Message d'erreur
                  JOptionPane.showMessageDialog(null,ex,"Connexion",JOptionPane.WARNING_MESSAGE);
                }
                //Connection à la base de données
                //Connection conn = DriverManager.getConnection(pilote + log + "/" + pass + url);
    			Connection conn = DriverManager.getConnection(p.getProperty ("jdbc.url"),log ,pass);
            //Création d'un statement
                stmt = conn.createStatement();
            }//Capture d'une erreur du type SQLException
            catch ( SQLException E)
            {   //Affichage d'un message d'erreur
                JOptionPane.showMessageDialog(null,E,"Connexion",JOptionPane.WARNING_MESSAGE);
            }
    		}
    	    catch (Exception e) {
    			   System.out.println(e.toString());
    		}
        }
    Maintenant j'obtiens ce message d'erreur :
    no suitable driver
    Auriez-vous une idée? Merci.

    Sinon à part ça : je n'ai pas encore tester les classes "ResourceBundle", peut être que cela vient de là, bien que j'en doute.

  5. #5
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Connection conn = DriverManager.getConnection(Class.forName(p.getProperty ("jdbc.url")), log, pass);

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    en fait d'après la doc de DBManager, il existe plusieurs méthode de connection et voici celle que j'utilise :

    getConnection

    public java.sql.Connection getConnection(java.lang.String url,
    java.lang.String user,
    java.lang.String password)
    throws java.sql.SQLException

    Creates and returns a single DB connection using a url, user and password. This method assumes that DriverManager has already loaded the appropriate driver. The caller must remember to close() the connection when they are done with it. If you want connections that close automatically use a DbPool instead.
    Cette méthode spécifie que le driver a déjà été chargé.

    et lq je saisie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Connection conn = DriverManager.getConnection(Class.forName(p.getProperty ("jdbc.url")), log, pass);
    Eclipse m'indique une erreur.

  7. #7
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    me suis trompé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DriverManager.registerDriver(Class.forName(p.getProperty ("jdbc.pilote"))); 
     
    Connection conn = DriverManager.getConnection(p.getProperty ("jdbc.url"), log, pass);

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    c'est pas grave si tu t'es trompé.
    par contre, je ne comprend tjs pas l'erreur et quoi que je fasse, je l'obtiens toujours.

    Voici différentes méthodes que j'ai utilisé pour la définition du driver et aucune ne fonctionne :
    -Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    -DriverManager.registerDriver(Class.forName(p.getProperty ("jdbc.driver")));
    -DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    -Class.forName(p.getProperty ("jdbc.driver")).newInstance();
    en plus celle ci : DriverManager.registerDriver(Class.forName(p.getProperty ("jdbc.driver"))); eclipse ne l'accepte pas et écrit :
    registrer driver(driver) in the type is not applicable for this argument.

    je craque.... il doit bien avoir un moyen qq, non.
    peut être est-ce lié à la classe12.zip ou autre chose... la vérité est ailleurs

  9. #9
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    re,

    Je n'ai pas d'install. Oracle sous la main...je ne peux te donner que qques remarques pour le moment


    Class.forName(p.getProperty ("jdbc.driver")).newInstance();
    newInstance () ne sert que pour l'interface Driver, pour la classe DriverManager c'est inutile;

    D'apres ton fichier properties
    jdbc.driver = jdbc.driver=oracle.jdbc.driver.OracleDriver
    or tu utilise
    final private String pilote = "jdbc:oracle:thin:";
    dans ton exemple de code.
    D'ou (je pense) ton erreur ...
    no suitable driver
    quand tu utilise
    Class.forName(p.getProperty ("jdbc.driver")).newInstance();
    Si j'ai 5 mn en rentrant chez moi je te ferais 1 exemple avec 1 base Oracle

    A +

    ps : Thibaut, merci pour ta remarque. J'essaie ce que tu conseilles dès que possible

  10. #10
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    re,

    comme promis je t'ai bricolé 1 petit bout de code pour se connecter à 1 base oracle ...
    (8.1.7 + classe12.zip)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    jdbc.driver= oracle.jdbc.driver.OracleDriver
    jdbc.url=jdbc:oracle:thin:@cay-largo:1521:MamaZ
    jdbc.username=SYSTEM
    jdbc.password=manager
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    import java.util.*;
    import java.io.*;
    import java.sql.*;
     
    public class PastaMamaZ
    {
    	public Connection Connecter (String FileName)
    	{
    		System.out.println ("PastaMamaZ.Connecter ()");
     
    		System.out.println ("    Establishing a Connection");
     
    		FileInputStream f;
    		Properties p;
    		Connection c;
                   	DatabaseMetaData dbmd;
     
    		f = null;
    		p = new Properties ();
    		c = null;
                    dbmd = null;
     
    		try
    		{
    			f = new FileInputStream (FileName + ".properties");
    		}
    		catch (java.io.FileNotFoundException e)
    		{
    			System.err.print ("FileNotFoundExceptionException: ");
    			System.err.println (e.getMessage () );
    		}
     
    		try
    		{
    			p.load (f);
    			f.close ();
    		}
    		catch (java.io.IOException e)
    		{
    			System.err.print ("IOExceptionException: ");
    			System.err.println (e.getMessage () );
    		}
     
    		System.out.println ("    1 : Loading Drivers");
     
    		try
    		{
    			System.out.println (p.getProperty ("jdbc.driver"));
    			Class.forName (p.getProperty ("jdbc.driver"));
    		}
    		catch (java.lang.ClassNotFoundException e)
    		{
    			System.err.print ("ClassNotFoundException: ");
    			System.err.println (e.getMessage () );
    		}
     
    		System.out.println ("    2 : Making the Connection");
     
    		try
    		{
    			System.out.println (p.getProperty ("jdbc.url"));
     
    			c = DriverManager.getConnection (	p.getProperty ("jdbc.url"),
    								p.getProperty ("jdbc.username"),
    								p.getProperty ("jdbc.password") );
    		}
    		catch (SQLException ex)
    		{
    			while (ex != null)
    			{
    				System.err.print ("SQLException: ");
    				System.err.print ('\n');
    				System.err.print ("SQLState: ");
                                    System.err.print (ex.getSQLState () );
    				System.err.print (" ");
    				System.err.print (ex.getMessage () );
    				System.err.print ('\n');
    				System.err.print ("ErrorCode: ");
                                    System.err.print (ex.getErrorCode () );
    				System.err.print ('\n');
     
    				ex = ex.getNextException();
    			}
    		}
     
    		System.out.println ("    Connection Established");
    		return c;
    	}
     
     
    	public PastaMamaZ ()
    	{
    		// System.out.println ("PastaMamaZ.PastaMamaZ ()");
     
    		Connecter ("PastaMamaZ");
    	}
     
    	public static void main (String [] args)
    	{
    			PastaMamaZ PMZ;
     
    			PMZ = new PastaMamaZ ();
    	}
    }
    ... résultat de l'exécution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PastaMamaZ.Connecter ()
        Establishing a Connection
        1 : Loading Drivers
    oracle.jdbc.driver.OracleDriver
        2 : Making the Connection
    jdbc:oracle:thin:@cay-largo:1521:MamaZ
        Connection Established
    voila ... tu n'as plus qu'a ...

    ps : on ne se moque pas des noms ... merci

  11. #11
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    et bien en tout cas, c'est gentil d'avoir pris de ton temps pour rédiger ce code.
    Je l'ai appliquée et voici le résultat :
    1 : Loading Drivers
    oracle.jdbc.driver.OracleDriver
    2 : Making the Connection
    @pc853:1521:maBase1
    SQLException:
    SQLState: 08001 No suitable driver
    ErrorCode: 0
    java.lang.NullPointerException
    at aic.DBManager.getQuery(DBManager.java:180)
    at aic.MyApplet.init(MyApplet.java:95)
    at sun.applet.AppletPanel.run(AppletPanel.java:347)
    at java.lang.Thread.run(Thread.java:536)

    alors je tiens à préciser que ds le répertoire lib de mon appli, j'ai ojdbc14.jar et j'ai aussi la librairie classes12.jar ms celle ci est en dehors du dossier lib (est-ce grave?)

    j'obtiens qd mm ce 'no suitable driver'


  12. #12
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    petite précision aussi, j'ai oracle 9i

  13. #13
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    alors j'utilise la méthode getConnection(url, log, pass)
    avec comme url :
    jdbc.url=jdbc:oracle:thin@pc853:1521:maBase1
    et maintenant j'obtiens l'erreur suivante :
    1 : Loading Drivers
    oracle.jdbc.driver.OracleDriver
    2 : Making the Connection
    jdbc:oracle:thin@pc853:1521:maBase1
    SQLException:
    SQLState: null L'URL Oracle indiquée n'est pas valide
    ErrorCode: 17067
    java.lang.NullPointerException
    at aic.DBManager.getQuery(DBManager.java:156)
    at aic.MyApplet.init(MyApplet.java:95)
    at sun.applet.AppletPanel.run(AppletPanel.java:347)
    at java.lang.Thread.run(Thread.java:536)
    je ne comprend plus rien de rien.

  14. #14
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    voilà c'est fait, enfin ça marche )

    j'ai utiliser la méthode getConnection(url, log, pass) pour me connecter avec comme URL :
    jdbc.url=jdbc:oracle:thin:@pc853:1521:mabase
    puis je me suis servi du code de TheLeadingEdge pour récupérer mes paramètres de connexion.

    un gd merci à vous et en particulier à TheLeadingEdge qui a pris le temps de refaire un code chez lui.

    Merci

  15. #15
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Avec plaisir ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.Net] Fichier app.config
    Par tomnie dans le forum Windows Forms
    Réponses: 24
    Dernier message: 28/03/2006, 10h33
  2. [Erreur]impossible de trouver le fichier de config du moteur
    Par julietteste dans le forum Bases de données
    Réponses: 5
    Dernier message: 10/05/2005, 18h34
  3. [C#] Section appSettings du fichier Web.config
    Par pbo dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/02/2005, 10h12
  4. [struts] utilisation de plusieurs fichiers de config
    Par Boosters dans le forum Struts 1
    Réponses: 4
    Dernier message: 25/03/2004, 10h04
  5. fichier de config: refuse tcpip_socket=true.
    Par phil25 dans le forum Installation
    Réponses: 1
    Dernier message: 04/01/2004, 15h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo