1

我有以下java代码,它给出了以下错误:

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"));
    }
}

错误:

$ 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.

正在编译的java文件export.java名是,编译后的文件名是export.class,我把dbunit-2.4.8.jarandjtds-1.2.5.jar文件和and放在同一个文件夹export.javaexport.class;我正在使用以下 cmd 编译 export.java:

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

知道我做错了什么吗?

4

4 回答 4

5

我遇到了这个问题,但是使用 maven (m2eclipse) 并从 Eclipse 内部运行它。当我从 dbunit 依赖项中删除 scope=test 时,我的问题得到了解决。

我也尝试从控制台运行,使用 javac 和 java,就像你一样,但得到了同样的错误。一定是因为我们忘记在类路径中包含一些依赖项。我们只需要 dbunit.jar 进行编译,但是 dbunit 类需要依赖其他东西才能真正运行,所以我们需要在运行时将其他 jar 放在 classpath 上(例如 slf4j)。

当从 Eclispe 内部成功运行时,这里是我的依赖项:slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar log4j-1.2.16.jar ojdbc6-11.1.0.6.0.jar(使用 oracle) dbunit-2.4.8.jar junit-3.8.2.jar commons-collections-3.2.1.jar

尝试将它们全部放在类路径上,看看它是否有效。

关于错误消息.. 尽管它说'找不到主类:导出。程序将退出。',这不是真的。它确实找到了主类,我可以在第二个之后注释掉所有行后调试执行。仅当我导入 org.dbunit.database.DatabaseConnection 时才会出现问题。我相信,当这个类被导入时,主类会尝试加载 DatabaseConnection,它会尝试加载不在类路径中的东西。所以java给出了一个误导性的错误信息。

于 2012-05-18T22:00:45.780 回答
1

我在 oracle 数据库上使用它,它工作正常^^

IDatabaseConnection connection = new DatabaseConnection(jdbcConnection, "SCHEMA_OF_YOUR_DB");
于 2012-03-27T09:30:43.383 回答
0

您的堆栈跟踪以

“找不到主类:export。程序将退出。”

这告诉我在执行时“导出”不在您的类路径中。您的类路径必须包含“export.class”。仅仅因为它与 JAR 位于同一文件夹中并不意味着它自动位于类路径中。

于 2010-12-06T22:08:52.577 回答
0

java运行命令行时需要包含 -cp 参数。像这样:

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

于 2010-12-06T22:10:33.300 回答