English 中文(简体)
我在命令行上运行Java程序,我做错了什么?
原标题:
  • 时间:2009-01-30 15:25:14
  •  标签:

Note I m running windows, the path just looks like it s linus because I typed it manually and thats how I think of paths.

我正在尝试运行我所建立的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.

我知道這是一個我應該知道答案的問題,但是我做錯了什麼?

最佳回答

用分号代替冒号:

java -classpath .;ojdbc6.jar DBDiagnostics <connectionString>
问题回答

有错误吗?

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

也许如果你输入这个,它会起作用:

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

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

DBDiagnostics类有一个包吗?如果有,您必须引用完整解析的类名,并且要在启动Java的目录中显示该包层次结构的根。

Mike Sickler的答案对于Windows平台看起来是正确的。Windows的路径分隔符是";",但Unix和Linux是":",因此确保您始终使用正确的分隔符!

很小的可能性,但这是Unix还是Windows?如果在Windows上,类路径分隔符应该是一个分号:-

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

当然,如果您没有指定路径,那么您需要在当前目录中拥有ojdbc6.jar文件。 (还有可能需要其依赖项...)





相关问题
热门标签