Pas la Class
Le
artintel
Un programme marche sous eclipse en mode console mais pas "java
Conexion" que ce soient dans les repertoires C:\Documents and Settings
\user\workspace\PROJET\bin\coNeXioN (worskpace d'eclipse ou il y a
le .class) ou dans un repertoire ou j'ai copie le .class et tous
les .jars qui apparaissent dans le PROJET sous eclipse. J'imagine que
c'est une question de path mais meme apres avoir lu plein de chose sur
CLASSPATH je ne comprends pas du tout ce qu'il faut faire ?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ PROGRAMME JAVA
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
package coNeXioN;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Conexion
{
public static void main (String args[])
{
String URL = "jdbc:sqlserver://
10.0.0.3;database=LaBase;user=client;password=client";
String username = "sa";
String password = "mot_de_passe";
try {
Class.forName
("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (Exception e) {
System.out.println("Failed to load JDBC/ODBC driver.");
return;
}
Statement stmt = null;
Connection con=null;
try {
con = DriverManager.getConnection (
URL,
username,
password);
stmt = con.createStatement();
} catch (Exception e) {
System.err.println("problems connecting to "+URL);
}
try {
ResultSet result = stmt.executeQuery("SELECT * FROM
ActivitéDossiers where NuméroDossier = 257018807");
System.out.println("Resultat = "+result);
while (result.next())
{
System.out.println("-");
System.out.println("Dossier : "+result.getString
("Dossier"));
}
con.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ EXECUTION DANS ECLIPSE
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Resultat = com.microsoft.sqlserver.jdbc.SQLServerResultSet@1457cb
-
numéroDossier : 257018807
-
numéroDossier : 257018807
-
numéroDossier : 257018807
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ CLASSPATH
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.;
C:\PROGRA~1\Java\jdk1.6.0_12\bin;
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ EXECUTION EN MODE CONSOLE
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
L:\TMP>javac Conexion.java
L:\TMP>java Conexion
Exception in thread "main" java.lang.NoClassDefFoundError: Conexion
(wrong name: coNeXioN/Conexion)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Conexion. Program will exit.
Conexion" que ce soient dans les repertoires C:\Documents and Settings
\user\workspace\PROJET\bin\coNeXioN (worskpace d'eclipse ou il y a
le .class) ou dans un repertoire ou j'ai copie le .class et tous
les .jars qui apparaissent dans le PROJET sous eclipse. J'imagine que
c'est une question de path mais meme apres avoir lu plein de chose sur
CLASSPATH je ne comprends pas du tout ce qu'il faut faire ?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ PROGRAMME JAVA
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
package coNeXioN;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Conexion
{
public static void main (String args[])
{
String URL = "jdbc:sqlserver://
10.0.0.3;database=LaBase;user=client;password=client";
String username = "sa";
String password = "mot_de_passe";
try {
Class.forName
("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (Exception e) {
System.out.println("Failed to load JDBC/ODBC driver.");
return;
}
Statement stmt = null;
Connection con=null;
try {
con = DriverManager.getConnection (
URL,
username,
password);
stmt = con.createStatement();
} catch (Exception e) {
System.err.println("problems connecting to "+URL);
}
try {
ResultSet result = stmt.executeQuery("SELECT * FROM
ActivitéDossiers where NuméroDossier = 257018807");
System.out.println("Resultat = "+result);
while (result.next())
{
System.out.println("-");
System.out.println("Dossier : "+result.getString
("Dossier"));
}
con.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ EXECUTION DANS ECLIPSE
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Resultat = com.microsoft.sqlserver.jdbc.SQLServerResultSet@1457cb
-
numéroDossier : 257018807
-
numéroDossier : 257018807
-
numéroDossier : 257018807
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ CLASSPATH
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.;
C:\PROGRA~1\Java\jdk1.6.0_12\bin;
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ EXECUTION EN MODE CONSOLE
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
L:\TMP>javac Conexion.java
L:\TMP>java Conexion
Exception in thread "main" java.lang.NoClassDefFoundError: Conexion
(wrong name: coNeXioN/Conexion)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Conexion. Program will exit.

Poser une question


Ben perso j'aurais déjà fait :
javac -d . Conexion.java
java coNeXioN.Conexion
Mais c'est peut-être pas le seul problème, il faut aussi s'assurer que le
jar contenent la classe com.microsoft.sqlserver.jdbc.SQLServerDriver soit
dans le classpath
Merci, en suivant tes conseils; j'ai fais :
1 - L:TMP>javac -d L:tmp Conexion.java *//*Commentaire/* -d L:tmp
etant le repertoire ou se trouvent les fichiers *//*
2 - Set classpath = %classpass%;K:Microsoft SQL Server 2005 JDBC
Driversqljdbc_1.0frasqljdbc.jar
3 - java coNeXioN.Conexion
Le classpath que j'ai rajoute, il sert bien a l'execution de java
coNeXioN.Conexion ? Ca signifie que la compilation du .class n'integre
pas les classes externes ? Je me gourre completement ? ;o)
[...]
oui, mais comme tu es déjà dans le répertoire l:tmp, -d . est équivalent à
à "-d L:tmp"
à ma grande honte je ne sais pas comment sont gérés les classpath (et les
path) sous windows. J'ai juste appris que parfois on peut remplacer les
backslash par des slash (mais pas partout) et que les espaces dans les noms
de répertoires peuvent poser des problèmes. Pour ces points il faut plutôt
demander à une spécialiste de cet os exotique ;-)
Ben non le classpath sert aussi bien au compilateur qu'à la machine
virtuelle, donc si tu pouvais compiler avant, alors c'est que la classe
pour le driver était trouvée.
Pas du tout: Java peut charger des classes dynamiquement, en particulier
pour les drivers (avec Class.forName) donc le classpath de compilation
n'est pas forcément le même qu'à l'exécution.
--
Patrick