わかりました、混乱しています。私のSQL Server JARはここにあります:
Volume in drive C has no label.
Volume Serial Number is 8008-2D93
Directory of c:\temp
03/07/2014 09:38 AM <DIR> .
03/07/2014 09:38 AM <DIR> ..
03/05/2014 10:34 PM 222,417 output.exd
02/17/2012 02:45 PM 563,117 sqljdbc.jar
02/17/2012 02:45 PM 584,207 sqljdbc4.jar
3 File(s) 1,369,741 bytes
2 Dir(s) 21,865,553,920 bytes free
私のクラスパスが設定されています:
C:\WINDOWS\system32>echo %CLASSPATH%
.;C:\Program Files (x86)\Java\jre7\lib\ext\QTJava.Zip;c:\temp\sqljdbc4.jar
JDBC 4.0ドライバーなので、これを行う必要はありませんが、クラス名を設定してみました。
Properties connectionProps = new Properties();
connectionProps.put("user", this.jdbcUser);
connectionProps.put("password", this.jdbcPass);
Class.forName("com.Microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection(this.jdbcUrl, connectionProps);
それでもプログラムを実行するとエラーが発生します。
Java.lang.ClassNotFoundException: com.Microsoft.sqlserver.jdbc.SQLServerDriver
C:\WINDOWS\system32>Java -jar "C:\Users\MYUSER\Documents\NetBeansProjects\myappSource\dist\myappSource.jar" -u MYUSER -p MYPASS -j "jdbc:sqlserver://127.0.0.1\\msqlserver:1433;database=MYDB"
Mar 07, 2014 9:49:54 AM filters.myapp.dao.db.DbSwitcher getDatabaseForUrl
SEVERE: jdbc:sqlserver://127.0.0.1\\msqlserver:1433;database=MYDB
Mar 07, 2014 9:49:54 AM filters.myapp.dao.db.Database connect
SEVERE: null
Java.lang.ClassNotFoundException: com.Microsoft.sqlserver.jdbc.SQLServerDriver
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 filters.myapp.dao.db.Database.connect(Database.Java:217)
at filters.myapp.dao.db.Database.<init>(Database.Java:38)
at filters.myapp.dao.db.MssqlDb.<init>(MssqlDb.Java:15)
at filters.myapp.dao.db.DbSwitcher.getDatabaseForUrl(DbSwitcher.Java:14)
at filters.myapp.UserInterface.cli(UserInterface.Java:76)
at filters.myapp.UserInterface.<init>(UserInterface.Java:34)
at filters.myapp.UserInterface.main(UserInterface.Java:46)
重要な場合は、私はWindows8.1を実行しています。私は管理者としてもそうでなくても、コマンドプロンプトを試しました。
Java情報:
C:\WINDOWS\system32>Java -version
Java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
何か案は?
SQLServerはSQLServer Express2012です。
-jarをJava.exeに渡すと、クラスパスは指定されたJarファイルのマニフェストから取得されます。すべての外部クラスパス設定(%CLASSPATH%など)は無視されます。
次のいずれかを実行します。
Java -cp ...\myapp.jarMainClassNameを使用します
Sqljdbc.jarをmyapp.jarのマニフェストのClass-Pathフィールドに配置します。
プログラムでsqljdbc.jarを検出してロードします。
sqljdbc4.jarをWebContent-> WEB_INF-> libフォルダーにコピーします。これで私の問題は解決しました。
アプリケーションZKをプログラムする場合は、sqljdbc4.jarをWebContent-> WEB_INF-> libフォルダーに配置します。
参照: Anandのコメント。
sqljdbc4.jarのクラスパスを設定します
CLASSPATH= D:\sqljdbc_4.0.2206.100_enu\sqljdbc_4.0\enu\sqljdbc4.jar;
eclipseユーザーの場合は、不要な.jar
ファイルsqljdbc
を削除してください
Eclipse STSを更新した後、このエラーが発生しました。更新中にサーバーが構成情報をすべて忘れてしまったことが判明しました。サーバーのクラスパスと環境変数をもう一度設定する必要があり、それで問題が修正されました。
新しいコマンドプロンプトを開き、以下の手順を試してください。C:\ WINDOWS\system32内で作業するのは好ましくありません。
この問題は、sqljdbc4.jarがクラスパスに正しく設定されていないことを示しています。
C:\Test
set classpath=%classpath%;.;c:\temp\sqljdbc4.jar
Java -jar "C:\Users\MYUSER\Documents\NetBeansProjects\myappSource\dist\myappSource.jar" -u MYUSER -p MYPASS -j "jdbc:sqlserver://127.0.0.1\\msqlserver:1433;database=MYDB"