8

注意 我正在运行 Windows,路径看起来就像是 linus,因为我手动输入了它,这就是我对路径的看法。

我正在尝试运行我为诊断与数据库的连接而构建的 java 类,它引用了 oracle jdbc 适配器。

当我在没有类路径的情况下运行它时:

%> java DBDiagnostics <connectionString>

当它到达以下代码行时出现异常:

Class.forName("oracle.jdbc.pool.OracleDataSource").newInstance();

除了以下例外:

java.lang.ClassNotFoundException: oracle.jdbc.pool.OracleDataSource
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at DBDiagnostics.GetConnection(DBDiagnostics.java:43)
        at DBDiagnostics.runDiagnostic(DBDiagnostics.java:29)
        at DBDiagnostics.main(DBDiagnostics.java:18)
Creating connection.
java.sql.SQLException: No suitable driver found for lskd
        at java.sql.DriverManager.getConnection(DriverManager.java:602)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
        at DBDiagnostics.GetConnection(DBDiagnostics.java:55)
        at DBDiagnostics.runDiagnostic(DBDiagnostics.java:29)
        at DBDiagnostics.main(DBDiagnostics.java:18)
Veryfying connectivity to Database
Exception in thread "main" java.lang.NullPointerException
        at DBDiagnostics.verifyTable(DBDiagnostics.java:86)
        at DBDiagnostics.verifyTable(DBDiagnostics.java:76)
        at DBDiagnostics.verifyDatabseConnectivity(DBDiagnostics.java:68)
        at DBDiagnostics.runDiagnostic(DBDiagnostics.java:36)
        at DBDiagnostics.main(DBDiagnostics.java:18)

我认为这是因为我需要将它包含在类路径中。

所以,我尝试将它添加到类路径中,如下所示:

%> java -classpath .:ojdbc6.jar DBDiagnostics <connectionString>

虚拟机只是说它找不到类:

Exception in thread "main" java.lang.NoClassDefFoundError: DBDiagnostics
Caused by: java.lang.ClassNotFoundException: DBDiagnostics
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: DBDiagnostics.  Program will exit.

我知道这是一个我应该知道答案的问题,但我做错了什么?

4

5 回答 5

18

用分号替换冒号:

java -classpath .;ojdbc6.jar DBDiagnostics <connectionString>
于 2009-01-30T15:31:45.473 回答
1

是否有错字:

%> java -classpath .:ojdbc6.jar DBDiagnostics <connectionString>

如果您键入以下内容,它可能会起作用:

%> java -classpath ./ojdbc6.jar DBDiagnostics <connectionString>
于 2009-01-30T15:28:41.253 回答
1

DBDiagnostics.class 文件是否出现在您启动 Java 的目录中?如果没有,类加载器将找不到它。

DBDiagnostics 类有包吗?如果是这样,您必须引用完全解析的类名,并且包层次结构的根必须出现在您启动 Java 的目录中。

于 2009-01-30T15:28:44.530 回答
1

Mike Sickler 的答案看起来适合 Windows 平台。Windows 的路径分隔符是“;”,但 Unix 和 Linux 的路径分隔符是“:”,因此请确保始终使用正确的分隔符!

于 2009-01-30T15:34:55.327 回答
1

远射,但这是 Unix 还是 Windows?如果在 Windows 上,类路径分隔符应该是分号:-

%> java -classpath .;ojdbc6.jar DBDiagnostics <connectionString>

当然,如果您不指定任何路径,则需要在当前目录中拥有 ojdbc6.jar 文件。(也可能是依赖项......)

于 2009-01-30T15:35:51.300 回答