2010-12-06 58 views
1

J'ai le code java suivant, qui donne l'erreur ci-dessous:erreur à l'aide DbUnit pour exporter un DB "java.lang.NoClassDefFoundError: org/DBUnit/base de données/IDatabaseConnection"

import java.io.File; 
import java.io.FileOutputStream; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

import org.dbunit.database.DatabaseConnection; 
import org.dbunit.database.IDatabaseConnection; 
import org.dbunit.dataset.IDataSet; 
import org.dbunit.dataset.xml.FlatXmlDataSet; 

public class export { 
    public static void main(String[] args) throws Exception { 
     // database connection 
     Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
     Connection jdbcConnection = DriverManager.getConnection(
      "jdbc:jtds:sqlserver://localhost:1433/exampleDB", "sa", "vista1"); 
     IDatabaseConnection connection = new DatabaseConnection(jdbcConnection); 

     // full database export 
     IDataSet fullDataSet = connection.createDataSet(); 
     FlatXmlDataSet.write(fullDataSet, new FileOutputStream("full.xml")); 
    } 
} 

erreur :

export java $

Exception in thread "main" java.lang.NoClassDefFoundError: org/dbunit/database/IDatabaseConnection 
Caused by: java.lang.ClassNotFoundException: org.dbunit.database.IDatabaseConnection 
     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) 
Could not find the main class: export. Program will exit. 

le nom du fichier java en cours de compilation est export.java et le nom du fichier compilé est export.class, et j'ai mis les fichiers dbunit-2.4.8.jar et jtds-1.2.5.jar dans le même dossier que export.java et export.class; et je compile export.java avec le cmd suivant:

$ javac -cp "dbunit-2.4.8.jar;jtds-1.2.5.jar" export.java 

Une idée de ce que je fais mal?

+0

L'objectif est d'exporter une base de données mssql simple dans un fichier XML à l'aide de dbunit. – erikvold

+0

Également essayé 'DriverManager.registerDriver (new net.sourceforge.jtds.jdbc.Driver());' au lieu de 'Class.forName (" net.sourceforge.jtds.jdbc.Driver ");' comme je le vois utilisé dans d'autres exemples, mais cela ne change pas l'erreur produite. – erikvold

Répondre

1

J'utilise ceci sur une base de données Oracle et il fonctionne très bien ^^

IDatabaseConnection connection = new DatabaseConnection(jdbcConnection, "SCHEMA_OF_YOUR_DB"); 
0

Votre stacktrace se termine par

"Could not find the main class: export. Program will exit."

Cela me dit que 'l'exportation' n'est pas dans votre classpath au moment de l'exécution. Votre chemin de classe doit inclure 'export.class'. Ce n'est pas parce qu'il se trouve dans le même dossier que les JAR qu'il est automatiquement dans le classpath.

+0

juste essayé 'javac -cp" dbunit-2.4.8.jar; jtds-1.2.5.jar; export.class "export.java' puis' java -cp "dbunit-2.4.8.jar; jtds-1.2. 5.jar; export.class "export' et cela n'a pas fait de différence. – erikvold

0

Vous devez inclure le paramètre -cp lorsque vous exécutez la ligne de commande java. Comme si:

java -cp "dbunit-2.4.8.jar;jtds-1.2.5.jar" export

+0

juste essayé 'javac -cp" dbunit-2.4.8.jar; jtds-1.2.5.jar; export.class "export.java' puis' java -cp "dbunit-2.4.8.jar; jtds-1.2. 5.jar; export.class "export' et cela n'a pas fait de différence. – erikvold

5

j'ai eu ce problème, mais en utilisant maven (m2eclipse) et en cours d'exécution à l'intérieur Éclipse. Mon problème a été résolu lorsque j'ai supprimé le test scope = test de la dépendance de dbunit.

J'ai également essayé de lancer à partir de la console, en utilisant javac et java, comme vous l'avez fait, mais j'ai eu la même erreur. Cela a dû être dû à certaines dépendances que nous avons oublié d'inclure dans le classpath. Nous n'avons besoin que de dbunit.jar pour compiler, mais les classes dbunit dépendent d'autres choses pour fonctionner réellement, donc nous devons mettre d'autres jars sur le classpath lors de l'exécution (slf4j, par exemple).

Lors de l'exécution avec succès à l'intérieur Eclispe, voici mes dependecies: slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar log4j-1.2.16.jar ojdbc6-11.1.0.6 .0.jar (en utilisant Oracle) DBUnit-2.4.8.jar JUnit-3.8.2.jar commons-collections-3.2.1.jar

Essayez de les mettre tous sur le chemin de classe et voir si elle travaux. A propos du message d'erreur .. Malgré le fait qu'il est dit «Impossible de trouver la classe principale: export. Le programme va sortir. ', Ce n'est pas vraiment vrai. Il trouve la classe principale, et je pourrais déboguer l'exécution après avoir commenté toutes les lignes après la seconde. Le problème se produit uniquement si j'importe le fichier org.dbunit.database.DatabaseConnection. Je crois que, lorsque cette classe est importée, la classe principale essaie de charger DatabaseConnection, qui essaie de charger quelque chose qui n'est pas dans le classpath. Ainsi, le java donne un message d'erreur trompeur.