Recuperer une connexion JDBC

Signaler
Messages postés
4
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
3 février 2003
-
Messages postés
6
Date d'inscription
lundi 20 juillet 2009
Statut
Membre
Dernière intervention
13 mars 2010
-
Salut !
Voila je doit faire un projet assez rapidement (j'espere dc avoir la solution rapidement :) !! ) et j'ai un probleme pour utiliser une connxexion jdbc dans les classes que je veut.
En fait je crée une classe qui etablit ma connexion et puis ensuite je fais mes requetes et leurs traitements dans ds classes spécifiques. A chaque fois j'ai la celebre erreur "nullPointerException" sur la ligne des mes requetes.

Soit j'ai ce code dans une classe :
Statement selectStmt = ConnexionBase.getStatement();ResultSet rSet selectStmt.executeQuery ("select id_even, titre_even, to_char(heure_deb, 'HH24:MI:SS') as heure_debut, to_char(heure_fin,'HH24:MI:SS') as heure_fin from evenement where type_even'rdv' ORDER BY 1");

avec getStatement déclaré en statique dans la classe ConnexionBase

Soit j'ai le code :
Connection connx = ConnexionBase.getConnexion();
try{
//initialisation jdbc du preparedstatementPreparedStatement Pstmt connx.prepareStatement("select id_user, nom from utilisateur where pseudo ? and password= ?");

avec getConnexion déclaré en statique dans la classe Connexionbase. Je pense que c'est soit le statement, soit la connexion qui n'est pas instancié mais comment résoudre ce problème ? merci beaucoup de votre aide !!!
C'est important et urgent ! :)
PS: les methodes getConnexion et getStatement retournent la connexion ou le statement courant (respectivement), crées par la classe qui crée la connexion.

6 réponses

Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
salut,
regarde cette source elle devrait t'aider.
Tu peux adapter la source en y mettant des static.
C'est dur de t'aider sans voir ta classe connexionbase
mais effectivement, tu as peut etre oublié d'instancier des objets dans cette classe.
Duss
Messages postés
4
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
3 février 2003

oui, j'ais deja fait un tour sur le site et j'avais vu ce source qui est très intéressant. Cependant, je n'arrive toujours pas à résoudre mon problème. En fait j'aimerais pour mon projet me connecter a la base au début et puis après utiliser cette connexion dans toutes mes classes ou je vais intérroger la base. J'ai du mal a voir comment réutiliser le code d'autres classes aisément. Voici le code de la classe connexion au cas ou ca peut aider et d'une des autres classes :
import java.sql.*;
import oracle.jdbc.driver.*;

class ConnexionBase
{
//Declaration des variables
    private static Connection connx; //connx : connection de type Connection
    private DatabaseMetaData meta; // meta : type DatabaseMetaData
    private static Statement stmt; // stmt : type Statement

  /*constructeur pour se connecter a la base*/
  public ConnexionBase() throws SQLException
    {
/* Chargement du driver jdbc. */
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
/* connexion a la base oracle */
try	{
System.out.println("Essai de connexion ...");
connx = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:mabase", "login", "pass");
meta = connx.getMetaData();
System.out.println("Jdbc driver version is " + meta.getDriverVersion());
System.out.println("Connecte a la base.");
//Empeche l'auto commit
connx.setAutoCommit(false);
//Creation d'un objet Statement
stmt = connx.createStatement();
}
/* recuperation de l'exception */
catch (SQLException e)
{
  System.err.println("impossible de se connecter : " + e.getMessage ());
}

    }

//Retourne le Statement stmt
    public static Statement getStatement()
{
return stmt;
}

//Retourne la Connexion connx
    public static Connection getConnexion()
{
return connx;
}

//Ferme la connexion
    public void close()
    {
try {
connx.close();
System.out.println("fermeture de la connexion oracle.");
}
catch (SQLException e){}
}

public static void main(String[] args)//uniquement la pour tester la connexion
{
try { ConnexionBase c = new ConnexionBase();}
catch (SQLException e){}
}
}



import oracle.sql.*;
import oracle.jdbc.driver.*;

//La classe Utilisateur permet de verifier la présence de l'utilisateur dans la base de donnees Oracle,
//et d'afficher le nom correspondant

public class Utilisateur
{
    //declaration des variable
String nomUser;
Connection connx;

//constructeur qui récupére la connexion a la base
public Utilisateur() 
{
connx = ConnexionBase.getConnexion();
}

//methode qui recupere le nom de l'utilisateur
public String NomUtilisateur (String pseudoUser, String pwdUser) throws SQLException
{

//initialisation jdbc du preparedstatementPreparedStatement Pstmt connx.prepareStatement("select id_user, nom from utilisateur where pseudo ? and password= ?");
Pstmt.setString(1,pseudoUser);
Pstmt.setString(2,pwdUser);

//Execution de  l'instruction sql et traitement du resultat
ResultSet rSet = Pstmt.executeQuery ();
System.out.println("nom de l'utilisateur : ");
try
{
while (rSet.next ())
{
nomUser =rSet.getString(2);
}
return nomUser;
}
catch (SQLException e)
{
return "utilisateur incorrect ! Veuillez recommencer la saisie. ";
}
finally
{
//Liberer les ressources et Fermeture de la connexion
rSet.close();
Pstmt.close();
connx.close();
}
}
public static void main (String args[])//uniquement la pour tester
{
try
{
Utilisateur currentuser = new Utilisateur();
currentuser.NomUtilisateur("pseudo","pass");
}
catch (SQLException e)
{
System.err.println("L'authentification n'a pas aboutie.");
}

}
}



voila comme je suis pas très a l'ais avec les objets merci de m'aider !
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
salut,

je vois 2 raisons possibles a ton problème,

1 - Essayes plutot un Class.forName à la place de ton DriverManager.registerDriver (ou met le en plus)

2 - Avant d'appeler ta methode statique, est ce que tu fais une instanciation de ta classe ConnexionBase ?
Car tu as mis un constructeur qui lui n'est pas une methode statique et c'est ici que tu fais ta connexion !!

Duss
Messages postés
21
Date d'inscription
mardi 14 janvier 2003
Statut
Membre
Dernière intervention
12 juin 2003

Salut;

Les lignes modifiées sont sur fond blanc (il faut instancier un objet avant d'utiliser ses propriétés):

import oracle.sql.*;
import oracle.jdbc.driver.*;

//La classe Utilisateur permet de verifier la présence de l'utilisateur dans la base de donnees Oracle,
//et d'afficher le nom correspondant

public class Utilisateur
{
//declaration des variable
String nomUser;
Connection connx;

//constructeur qui récupére la connexion a la base
public Utilisateur() 
{

ConnexionBase cb= new ConnexionBase();//instanciation
connx = cb.getConnexion();
}

//methode qui recupere le nom de l'utilisateur
public String NomUtilisateur (String pseudoUser, String pwdUser) throws SQLException
{

//initialisation jdbc du preparedstatementPreparedStatement Pstmt connx.prepareStatement("select id_user, nom from utilisateur where pseudo ? and password= ?");
Pstmt.setString(1,pseudoUser);
Pstmt.setString(2,pwdUser);

//Execution de l'instruction sql et traitement du resultat 
ResultSet rSet = Pstmt.executeQuery ();
System.out.println("nom de l'utilisateur : ");
try
{
while (rSet.next ())
{
nomUser =rSet.getString(2);
}
return nomUser;
}
catch (SQLException e)
{
return "utilisateur incorrect ! Veuillez recommencer la saisie. ";
}
finally
{
//Liberer les ressources et Fermeture de la connexion
rSet.close();
Pstmt.close();
connx.close();
}
}
public static void main (String args[])//uniquement la pour tester
{ 
try
{ 
Utilisateur currentuser = new Utilisateur();
currentuser.NomUtilisateur("pseudo","pass");
}
catch (SQLException e)
{
System.err.println("L'authentification n'a pas aboutie.");
}

}
}

Messages postés
4
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
3 février 2003

Salut !
oui c t ca ... en fait je voyais pas les choses comme il fallait. Je pensais que la conexion serait faites ds la classe ConnexionBase et pa ailleurs ... !!! c dure de penser en objet java en fait !!
merci :D
Messages postés
6
Date d'inscription
lundi 20 juillet 2009
Statut
Membre
Dernière intervention
13 mars 2010

Salut ,
Je devra réaliser une application web c.a.d servlet ,classe et jsp mais je n'arrive pas a ce connecté a la base de donnée oracle 10g
Quelqu'un pourrez m'aider svp
Merci .