JVM を実行するときとコンパイラを実行するときに、クラスパスを設定する必要があります。クラスパスには、JAR を含むフォルダーではなく、JAR 自体を含める必要があります。
あなたのライン
javac -cp ".:/usr/share/java" HelloWorld.java
は、クラスパスをjavac
Java コンパイラに渡しているが、JVM には渡していないことを示しています。
次の単純なクラスを使用してみましょう。これは、MySQL に接続してから再び切断するだけです。
import java.sql.*;
public class HelloWorld {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db", "user", "password");
System.out.println("Got connection");
con.close();
}
}
これを実行すると、次のようになります。
C:\Users\Luke\Java>echo %CLASSPATH%
.;C:\Program Files (x86)\Java\jre6\lib\ext\QTJava.zip;C:\Users\Luke\stuff\ojdbc6.jar
C:\Users\Luke\Java>java HelloWorld
Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
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)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at HelloWorld.main(HelloWorld.java:5)
この場合、MySQL ドライバー JAR はクラスパスにないため、ドライバー クラスをロードしようとするとエラーが発生します ( com.mysql.jdbc.Driver
)。
-cp
コマンドライン スイッチ を使用してドライバー JAR をクラスパスに追加すると(現在のディレクトリにこの JAR のコピーがあります)、次のように動作します。
C:\Users\Luke\Java>java -cp .;mysql-connector-java-5.1.18-bin.jar HelloWorld
Got connection
(私は Windows を使用;
しているので、パス区切りとして使用します。Unix の方言を使用しているようですので、:
代わりに使用する必要があります。)
同様に、JAR をCLASSPATH
環境変数に追加すると、これも機能します。
C:\Users\Luke\Java>set CLASSPATH=%CLASSPATH%;mysql-connector-java-5.1.18-bin.jar
C:\Users\Luke\Java>java HelloWorld
Got connection