請幫忙解決頑固的NoClassDefFoundError錯誤


小弟沒有任何數據庫基礎所以想通過做書上的“ATM應用程序”實例學習一些數據庫的基本知識;書上提供了ATM的源代碼以及做實例的步驟,書上用的是Cloudscape數據庫,根據書上實例步驟做到以下這步時出現問題:
D:\Learning\JAVA\SimplyJava\SimplyJava-examples\Tutorial26\Comp
ATM>java ATM com.ibm.db2j.jdbc.DB2jDriver jdbc:db2j:ATM
Exception in thread "main" java.lang.NoClassDefFoundError: ATM

此目錄下明明有 ATM.class 和 ATM.java 文件的,請問各位大俠:為什么仍會提示這樣的錯誤呢?謝謝!

(本人的classpath變量配置為.;C:\Borland\JBuilder2005\jdk1.4\jre\lib \rt.jar;C:\Borland\JBuilder2005\jdk1.4\jre\lib;C:\Borland\JBuilder2005\jdk1.4\lib;C:\Cloudscape_5.1\lib\db2j.jar;D:\Learning\JAVA\SimplyJava\SimplyJava-examples\Tutorial26\CompletedApplication\ATM;)

**********以下為源文件************:
// Tutorial 26: ATM.java
// ATM application allows users to access an account, 
// view the balance and withdraw money from the account.
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.text.*;
import javax.swing.*;
import javax.swing.event.*;

public class ATM extends JFrame
{
   …………中間省略N段代碼…………
   // method main
   public static void main( String[] args ) 
   {
      // check command-line arguments
      if ( args.length == 2 )
      {
         // get command-line arguments
         String databaseDriver = args[ 0 ];
         String databaseURL = args[ 1 ];

         // create new ATM
         ATM atm = new ATM( databaseDriver, databaseURL );
      }
      else // invalid command-line arguments
      {
         System.out.println( 
            "Usage: java ATM databaseDriver databaseURL" );
      }

   } // end method main

} // end class ATM

11 个解决方案

#1


com.ibm.db2j.jdbc.DB2jDriver jdbc:db2j這玩意哪來的?

你肯定是路徑問題

如果你的類沒有package,就直接java ATM

否則如果有package,就java packagename.ATM

建議使用IDE開發

#2


聽聽hellwindy的建議吧,敲命令的方式只要知道javac和java就行了。

#3


回樓上兩位大俠:
書上說 
參數com.ibm.db2j.jdbc.DB2jDriver 表示JDBC驅動程序;
參數jdbc:db2j:ATM 表示數據庫URL;

#4


com.ibm.db2j.jdbc.DB2jDriver改成com.ibm.db2.jdbc.app.DB2Driver

如果還是不對,那就看看db2數據庫那個jdbc驅動是不是正確。

#5


下面再補充說明一下這個問題
此實例開頭兩步為:

▉首先執行命令① C:\Cloudscape_5.1\frameworks\embedded\bin\setCP.bat
顯示以下內容:
D:\Learning\JAVA\SimplyJava\SimplyJava-examples\Tutorial26\CompletedApplication\
ATM>set CLASSPATH=C:\Cloudscape_5.1\lib\db2j.jar;C:\Cloudscape_5.1\lib\db2jtools
.jar;C:\Cloudscape_5.1\lib\db2jcview.jar;C:\Cloudscape_5.1\lib\jh.jar;C:\Cloudsc
ape_5.1\lib\license.jar;.;C:\Borland\JBuilder2005\jdk1.4\jre\lib \rt.jar;C:\Borl
and\JBuilder2005\jdk1.4\jre\lib;C:\Borland\JBuilder2005\jdk1.4\lib;C:\Cloudscape
_5.1\lib\db2j.jar;D:\Learning\JAVA\SimplyJava\SimplyJava-examples\Tutorial26\Com
pletedApplication\ATM;
  *其中setCP.bat的內容為【
set DB2J_INSTALL=C:\Cloudscape_5.1
set CLASSPATH=%DB2J_INSTALL%\lib\db2j.jar;%DB2J_INSTALL%\lib\db2jtools.jar;%DB2J_INSTALL%\lib\db2jcview.jar;%DB2J_INSTALL%\lib\jh.jar;%DB2J_INSTALL%\lib\license.jar;%CLASSPATH%


▉然后執行命令② java ATM com.ibm.db2j.jdbc.DB2jDriver jdbc:db2j:ATM
顯示以下內容:
D:\Learning\JAVA\SimplyJava\SimplyJava-examples\Tutorial26\CompletedApplication\
ATM>java ATM com.ibm.db2j.jdbc.DB2jDriver jdbc:db2j:ATM
Thank you for your interest in Cloudscape products. Your evaluation license has
expired.
java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getConnection(DriverManager.java:532)
        at java.sql.DriverManager.getConnection(DriverManager.java:193)
        at ATM.<init>(ATM.java:86)
        at ATM.main(ATM.java:905)
Exception in thread "main" java.lang.NullPointerException
        at ATM.loadAccountNumbers(ATM.java:807)
        at ATM.createUserInterface(ATM.java:475)
        at ATM.<init>(ATM.java:101)
        at ATM.main(ATM.java:905)
 *以上顯示java.sql.SQLException: No suitable driver表示找不到數據庫驅動,到這里就做不下去了。

▉為了解決驅動問題,我嘗試了很多方法,后來用了下面這種方法,好像有了一點進展:
在執行上面的命令①之前首先執行:
set CLASSPATH=C:\Cloudscape_5.1\lib\db2j.jar

然后再依次執行上面的命令①和命令②
上面的java.sql.SQLException: No suitable driver不見了,倒是出現了另一個Exception:

Exception in thread "main" java.lang.NoClassDefFoundError: ATM

▊我崩潰了!!為了解決這些問題我花了幾天時間去嘗試各種方法……痛苦啊!請各位大俠再幫幫我吧,謝謝了!!

#6


頂貼!非常想解決這個問題……

#7


java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getConnection(DriverManager.java:532)
        at java.sql.DriverManager.getConnection(DriverManager.java:193)
-----------------------------------------------------------------------------
驅動程序錯了,命令行里輸入錯了,按smyl9989()說的,應該沒問題,勸你還是弄個IDE搞吧,比如Eclipse,否則抓狂是必然的。

#8


還是不行……抓狂了!
D:\Learning\JAVA\SimplyJava\SimplyJava-examples\Tutorial26\CompletedApplication\
ATM>java ATM com.ibm.db2.jdbc.app.DB2Driver jdbc:db2j:ATM
Exception in thread "main" java.lang.NoClassDefFoundError: ATM

D:\Learning\JAVA\SimplyJava\SimplyJava-examples\Tutorial26\CompletedApplication\
ATM>

我現在還沒怎么用過IDE,還停留在命令行的地步……如果現在用IDE的話估計可能要花比較多時間才能熟悉,而且很可能對這個問題還是找不着北……苦

#9


我有點暈了,你用的是Cloudscape數據庫,但是你卻用了db2數據庫的jdbc驅動...

#10


哦,明白了,ibm還真有Cloudscape數據庫的jdbc驅動。不好意思,先前看錯了。

我沒用過Cloudscape數據庫,但是看到它的url是這么寫的:jdbc:db2j:f:\Cloudscape,和你寫的不太一樣啊,看看是不是這個問題。

#11


呵呵,java入門難,難到你抓狂。
首先,你要明白,java默認找class的過程:
運行參數classpath->環境變量的classpath->java命令所在的jre的rt.jar
所以
1、如果你想要在ATM類所在目錄運行ATM.class,要這么做:
java -classpath . ATM

2、按你的ATM類寫法,要想使用db2j.jar中JBDC驅動類,又能正確運行ATM類,要這么做:
java -classpath .;C:\Cloudscape_5.1\lib\db2j.jar ATM com.ibm.db2j.jdbc.DB2jDriver jdbc:db2j:ATM

3、要想db2j.jar能有效運行,請安裝有效的Cloudscape,因為你的運行錯誤的第一行如下:
Thank you for your interest in Cloudscape products. Your evaluation license has
expired.
也就是license過期了。

總結,解決問題首先不要抓狂,然后看清楚所有錯誤信息,英文不行的話baidu網絡字典幫忙。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com