bonsoir,

Alors avec 1 base oracle je dois effectuer un appel de procédure via jdbc comme suit :

dans ma classe ConnectionBD

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
package model;
 
import java.sql.*;
 
import oracle.jdbc.pool.OracleDataSource;
 
public class ConnectionBD 
{
	private Connection conn ;
	private OracleDataSource ods ;
	private CallableStatement callstmt;
 
	/*=======================================================
	 *		construteurs 
	 *======================================================*/
	/**
         * constructeur qui se charge d'etablir la connexion avec 
         * la bd via 1 OracleDataSource
         * 
         */
	public ConnectionBD(Connection conn,OracleDataSource ods)
	{
		try
		{
			//chargement du driver- p.7 du cours  
			ods = new OracleDataSource() ;
			ods.setDriverType("thin") ;
			ods.setServerName("soracle") ;
			ods.setNetworkProtocol("tcp")  ;
			ods.setPortNumber(1521) ;
			ods.setDatabaseName("DB01") ;
			//ici a conn il faut mettre ton login deux fois entre " "
			//obligatoire pour avoir la connexion
			conn = ods.getConnection("i10b01a","i10b01a") ;
 
		    System.out.println("connexion réussie aupres de la base de données") ;
		}
		catch(SQLException e)
		{
			System.out.println("connexion auprés de la base de donnée échouee");
			e.printStackTrace() ;
		}
	}	
		/*=============================================
		 * 			methodes
		 * ============================================*/
 
		/**
                 * methode qui ferme la connexion
                 */
		public void fermerConnexion()
		{
 
			   if(conn != null)
			   {
				   try
				   {
					   conn.close() ;
				   }
				   catch(Exception e)
				   {
					   e.printStackTrace();
				   }
			   }
 
		}
}
et dans ma classe EmployeDAO ou je fais appel à ma procédure stockée :

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
package model ;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Vector;
 
import oracle.jdbc.OracleTypes;
import oracle.jdbc.pool.OracleDataSource;
 
public class EmployeDAO {
 
	private Vector listeEmploye;
 
	public EmployeDAO(Vector listeEmploye)
	{
		this.listeEmploye = listeEmploye;		
	}
 
 
 
 
	public void listeEmployes(int service, Connection connection) throws SQLException  {
 
		CallableStatement requete = connection.prepareCall("{call LICPRO.GESTION.LISTE_EMPLOYE(?,?)}");
		requete.setInt(1,service);
		requete.registerOutParameter(2,OracleTypes.CURSOR);
		requete.execute();
		ResultSet resultat = (ResultSet)requete.getObject(2);
 
		try	{ 
		    Vector ligne = new Vector() ;
 
		    // Lit une ligne
		    while(resultat.next())
		    {
 
		        ligne.add(resultat.getInt("nuempl"));
		        ligne.add(resultat.getString("nomempl"));
		        ligne.add(resultat.getInt("hebdo"));
		        ligne.add(resultat.getInt("affect"));
 
		        // Ajout de la ligne au tableau
		        listeEmploye.add(ligne) ;
		        ligne = new Vector() ;
		    }
		}
		catch(SQLException se){}
	}
 
	public Vector getListeEmploye() {
		return listeEmploye;
	}
 
	public void setListeEmploye(Vector listeEmploye) {
		this.listeEmploye = listeEmploye;
	}
 
 
}
et dans ma view

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
public View(Model model, Controler controler) throws SQLException
	{
		super("JDBC Employé");
 
		//initialisation du modele
		this.model = model;
		this.ctrl = controler;
		//dimension fenetre
		setSize(800,600);
		//Fermeture propre de l'appli
		setDefaultCloseOperation(EXIT_ON_CLOSE);
 
		String[] colonnes = {"numero employe ","nom de l'employe","hebdo","affect"} ;
 
		final DefaultTableModel modele = new DefaultTableModel(colonnes,0) ;
		//Jtable
 
 
		liste = new JTable(modele);		
		liste.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
		originalSelectionBackGround = liste.getSelectionBackground();
 
		scrollPane = new JScrollPane(liste);
 
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add(scrollPane);
 
		container = new Container();
		container.setLayout(new FlowLayout());
 
		panel = new JPanel();
		panel.setLayout(new BorderLayout());
		panel.add(container);		
 
		int service = 0 ;
		getContentPane().add(panel,BorderLayout.SOUTH);	
 
		EmployeDAO empD = new EmployeDAO(listeEmploye) ;
 
		empD.listeEmployes(service, conn) ;
		}
mais le probléme c'est quand j'execute, on me retourne tt le tps un nullPointerException dû à cette ligne

CallableStatement requete = connection.prepareCall("{call LICPRO.GESTION.LISTE_EMPLOYE(?,?)}");
et comme trace
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
connexion réussie aupres de la base de données
Exception in thread "main" java.lang.NullPointerException
	at model.EmployeDAO.listeEmployes(EmployeDAO.java:26)
	at view.View.<init>(View.java:82)
	at main.Main.<init>(Main.java:37)
	at main.Main.main(Main.java:67)
je ne sais d'ou vient le probléme & ça me saoule
si quelqu'un peut me donner un conseil, j'suis preneur

merci d'avance
a +