小弟没有任何数据库基础所以想通过做书上的“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
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
解决方案 »
- 塔防游戏中塔算不算一个用户?
- 来看这三道题,来理解“聚合和耦合”的关系!
- java的URLConnection.getContent()返回内容的判断?
- 在循环体内部定义一个变量,该变量是只定义了1次,还是和循环次数相关?
- 方法内的部件(如Jcheckbox)的监听器为什么不能判断部件的属性
- 如何做到system.out.println转到jtextarea的逐行输出
- 求助:多线程问题
- !!深入探讨JVM:Java线程同步使用的“监视器”和“对象锁”是不是一回事?他们的关系如何?
- 小弟刚刚毕业,问一下各位大哥的发展历程
- 大家知道一个字符串例如:"aa;bb;cc;"怎么把它分割出来吗?
- 菜鸟救助TextField(30)中的代表什么意思?
- thinking in java 和 JAVA 2核心技术 初学者到底应该选择哪本好!!!!!!!
书上说
参数com.ibm.db2j.jdbc.DB2jDriver 表示JDBC驱动程序;
参数jdbc:db2j:ATM 表示数据库URL;
此实例开头两步为:▉首先执行命令① 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▊我崩溃了!!为了解决这些问题我花了几天时间去尝试各种方法……痛苦啊!请各位大侠再帮帮我吧,谢谢了!!
at java.sql.DriverManager.getConnection(DriverManager.java:532)
at java.sql.DriverManager.getConnection(DriverManager.java:193)
-----------------------------------------------------------------------------
驱动程序错了,命令行里输入错了,按smyl9989()说的,应该没问题,劝你还是弄个IDE搞吧,比如Eclipse,否则抓狂是必然的。
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: ATMD:\Learning\JAVA\SimplyJava\SimplyJava-examples\Tutorial26\CompletedApplication\
ATM>我现在还没怎么用过IDE,还停留在命令行的地步……如果现在用IDE的话估计可能要花比较多时间才能熟悉,而且很可能对这个问题还是找不着北……苦
首先,你要明白,java默认找class的过程:
运行参数classpath->环境变量的classpath->java命令所在的jre的rt.jar
所以
1、如果你想要在ATM类所在目录运行ATM.class,要这么做:
java -classpath . ATM2、按你的ATM类写法,要想使用db2j.jar中JBDC驱动类,又能正确运行ATM类,要这么做:
java -classpath .;C:\Cloudscape_5.1\lib\db2j.jar ATM com.ibm.db2j.jdbc.DB2jDriver jdbc:db2j:ATM3、要想db2j.jar能有效运行,请安装有效的Cloudscape,因为你的运行错误的第一行如下:
Thank you for your interest in Cloudscape products. Your evaluation license has
expired.
也就是license过期了。总结,解决问题首先不要抓狂,然后看清楚所有错误信息,英文不行的话baidu网络字典帮忙。