Connexion Java / Oracle avec Eclipse

techsupp
Connexion Java / Oracle avec Eclipse

Bonjour,
voila, j'essai de me connecter a une base oracle avec Java, j'utilise Eclipse et j'ai le message d'erreur suivant:

Quote:
java.lang.NoSuchMethodError: main
Exception in thread "main"

je vous remercie d'avance pour vos réponses.
Salutations.
willbback

Bonjour,
C'est un peu court comme définition de ton problème. Mais bon, le message d'erreur semble être un peu plus explicite....
Résumons pour bien comprendre :
_ tu utilise éclipse pour développer
_ tu as écrit un programme java qui se connecte à une base de donnée
_ tu a un problème quand tu fait exécuter ton programme avec la commande "Exécuter..." d'Eclipse.
La réponse est tout simplement, il n'y a pas de méthode main dans la classe que tu essaye d'éxécuter (ou alors ta méthode main n'a pas la bonne signature).

public class MaClass {
	public static void main(String[] args) {


	}
}


Voilà la réponse en fonction des indications que tu as donné. Sinon, il faut plus de détail.
techsupp

je te remercie pour ta réponse,
en fait je suis désolé d'avoir résumé mon problème, voici le code que j'utilise:

package com.eclipsetotale;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class base  {
	Connection con = null;
    ResultSet resultats = null;
   String requete = "select * from MATABLE ";
	private static void affiche(String message) {
		System.out.println(message);
		}
		private static void arret(String message) {
		System.err.println(message);
		System.exit(99);
		}
		
	//	public  void base() {
		
		//chargement de driver 
		
		public void connexionBD() {
		    try
		    {
                 Class.forName("oracle.jdbc.driver.OracleDriver");			   
			     System.out.println ("driver etablie");
		    }
		    catch(Exception e)
		    {
		    	System.out.println ("erreur:Driver int" +
		    			"rouvable");
		    }
		   
		    
		    //connexion à la base 
		    
		    try 
		    {
		  		        String URL = "jdbc:oracle:thin:@IPSERVEURDB:1521:NOMBASE";
		  		    	String USER = "USER"; 
		  		    	String PASSWD = "PWD"; 
		  		    
		  		    	 con=DriverManager.getConnection( URL, USER, PASSWD);
		  		    	System.out.println("connexion  base etablie");
		  		    	
		  		    	}
		    
		    catch(Exception e)
		    		    
		      {
		       
		    	System.out.println ("erreur: base introuvable");
		    
		    }}
//////	/
		public void select(String requete, String username){
			     requete = "select * from MATABLE where username ='" + username + "'";
			    	try {
			    		Statement stmt = con.createStatement();
			    		resultats = stmt.executeQuery(requete);
			    		} catch (SQLException e) {
			    		System.out.println("Anomalie lors de l'execution de la requête");
			    		}
			   
			  //parcours des données retournées
			    		
			    affiche("parcours des données retournées");
			    try {
			    ResultSetMetaData rsmd = resultats.getMetaData();
			    int nbCols = rsmd.getColumnCount();
			    boolean encore = resultats.next();
			    while (encore) {
			    for (int i = 1; i <= nbCols; i++)
			    System.out.print(resultats.getString(i) + " ");
			    System.out.println();
			    encore = resultats.next();
			    }
			    resultats.close();
			    } catch (SQLException e) {
			    arret(e.getMessage());
			    }
			   
			    }
		public static void main (String args[], String username){
		String requet = "select * from MATABLE where username ='" + username + "'";
			base B= new base();
			B.connexionBD();
			B.select(requet, username);

		
		}
		 

		}
			    	  
		

	



willbback

Ton code confirme bien ce que j'ai écrit précédement, ta fonction main n'existe pas.

      public static void main (String args[], String username){ 
      String requet = "select * from MATABLE where username ='" + username + "'"; 
         base B= new base(); 
         B.connexionBD(); 
         B.select(requet, username); 

       
      } 

Ta fonction main contient un argument de trop "String username" et n'est donc pas reconnu par Java. Cette fonction a une signature particulière qui ne doit pas être changer (Regarde celle que je t'ai donnée en exemple).
Je suppose que tu veux récupérer la variable "username" en tant que paramètre de ton programme. Il te faut donc modifier ton code de cette façon :
	public static void main(String[] args) {
		String username = args[0];
		String requet = "select * from MATABLE where username ='" + username + "'";
		base B = new base();
		B.connexionBD();
		B.select(requet, username);
	}

Le tableau de String "args" contient les arguments de la ligne de commande, avzec args[0] = 1er arguement, args[1] = 2ème argument etc...
techsupp

je te remercie grand chef pour ta réponse la j'ai un autre message aprés rectification:

Quote:
java.lang.ArrayIndexOutOfBoundsException: 0
at com.eclipsetotale.base.main(base.java:88)
Exception in thread "main"

et su la ligne 88 j'ai le code suivant que tu ma donner pour args:

String username = args[0];

willbback

Parce que tu n'as pas passé d'argument à ton programme.
La première chose serait d'écrire un petit test :

   public static void main(String[] args) { 
      if (args.length == 1) {
        String username = args[0]; 
        String requet = "select * from MATABLE where username ='" + username + "'"; 
        base B = new base(); 
        B.connexionBD(); 
        B.select(requet, username);
      } else {
        System.out.println("Il manque l'argument pour le programme");
      }
   } 

Ensuite, il te faut passé l'argument à ton programme lors de l'éxécution. Pour celà, tu peux paramètrer le lancement dans eclipse.
Dans le menu "Exécuter>Executer..." tu crée une nouvelle application java. Dans l'onglet "argument" tu peux ajouter la valeur que tu veux. Il ne te reste plus qu'à appliquer le changement et à cliquer sur le bouton "executer".
techsupp

Je te remercie chef pour tes efforts
j'ai fait ce que tu ma proposé et j'etai dans l'obligation de donne une valeur a mon args, voici le nouveau message:

Quote:
java.lang.NoClassDefFoundError: /C:/eclipse/
Exception in thread "main"

j'ai donner la valeur suivante ${eclipse_home}
willbback

techsupp wrote:
j'etai dans l'obligation de donne une valeur a mon args

Donc tu avais le message "Il manque l'argument pour le programme" ce qui était donc prévu puisque tu ne devais pas avoir mis d'arguement à ton programme.
C'est la suite que je ne comprends plus :
techsupp wrote:
voici le nouveau message:
Quote:
java.lang.NoClassDefFoundError: /C:/eclipse/
Exception in thread "main"

j'ai donner la valeur suivante ${eclipse_home}

Effectivement, la valeur "/C:/eclipse/" correspond à la variable "${eclipse_home}", du moins je suppose.
Le message indique de tu essaye d'utiliser "/C:/eclipse/ " en tant qu'objet. Ce qui serait bien se serait d'avoir le numéro de ligne qui fait ce problème. La trace complète serait la bienvenue et le code que tu utilises maintenant, ça serait pas mal

techsupp

je te remercie grand chef, j'utilise toujours le meme code, avec les modifications que tu ma donner

willbback

techsupp wrote:
je te remercie grand chef ...

Le "grand chef" n'est pas obligatoire....
Concernant ton code, quand je l'éxécute avec comme argument "toto" mon retour est
driver etablie
erreur: base introuvable
java.lang.NullPointerException
	at com.eclipsetotale.base.select(base.java:63)
	at com.eclipsetotale.base.main(base.java:95)
Exception in thread "main" 

Ce qui est bien concevable car je n'ai pas ta base de donnée et je n'ai pas configuré la connexion
Une fois que j'ai tout paramétré (j'ai du modifier la requête, et les paramètres de connexion à mon serveur) tout marche bien.
Je pense donc que c'est simplement le paramètre que tu as mis dans ton programme. Essai simplement avec toto apr exemple
techsupp

PS: grand chef c'est juste question d'habitude pour moi

si j'enleve la variable j'aurai le meme message que le tiens base introuvable et la suite;
et si je la remet j'aurai le meme message

Quote:
java.lang.NoClassDefFoundError: /C:/eclipse/
Exception in thread "main"
techsupp

Cher amis développeurs est ce que vous pouvez m'aider afin de résoudre mon problème
merci pour votre habituelle collaboration

willbback

techsupp wrote:
si j'enleve la variable j'aurai le meme message que le tiens base introuvable et la suite;
et si je la remet j'aurai le meme message

Alors enlève là. Cette variable ne sert à rien dans ton cas. Elle indique simplement le répertoire d'installation d'Eclipse.
Si tu as le même message que le miens, cela signifie tout simplement que les paramètres de connexion à ta base de donnée sont faux.
Dans la méthode "connexionBD", il faut que tu change les valeurs des variables url, user, pwd pour que ça marche

String URL = "jdbc:oracle:thin:@IPSERVEURDB:1521:NOMBASE"; 
String USER = "USER"; 
String PASSWD = "PWD";