【问题标题】:Classpath set, but: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver类路径集,但是:java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
【发布时间】:2014-03-07 15:01:16
【问题描述】:

好吧,我很困惑。我的 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)

以防万一,我运行的是 Windows 8.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)

有什么想法吗?

SQL Server 是 SQL Server Express 2012。

【问题讨论】:

    标签: java jdbc sql-server-2012-express mssql-jdbc


    【解决方案1】:

    如果将 -jar 传递给 java.exe,则类路径取自指定 Jar 文件的清单;所有外部类路径设置(例如 %CLASSPATH%)都被忽略。

    执行以下操作之一:

    1. 使用 java -cp ...\myapp.jar MainClassName

    2. 将 sqljdbc.jar 放入 myapp.jar 清单中的 Class-Path 字段。

    3. 以编程方式发现和加载 sqljdbc.jar。

    【讨论】:

    • 这看起来很有希望。我现在正在尝试选项#1。
    【解决方案2】:

    复制WebContent-->WEB_INF-->lib文件夹下的sqljdbc4.jar。 这解决了我的问题。

    【讨论】:

      【解决方案3】:

      设置sqljdbc4.jar的类路径

      CLASSPATH= D:\sqljdbc_4.0.2206.100_enu\sqljdbc_4.0\enu\sqljdbc4.jar;
      

      如果您是 Eclipse 用户,请删除不必要的 .jar 文件 sqljdbc

      【讨论】:

        【解决方案4】:

        如果您编写应用程序 ZK,则将 sqljdbc4.jar 放在文件夹 WebContent -> WEB_INF -> lib 中。

        参考: Anand's comment.

        【讨论】:

          【解决方案5】:

          打开一个新的命令提示符,并尝试如下步骤,在 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"
          

          【讨论】:

          • 当您使用-jar 选项时,CLASSPATH 环境变量将被忽略,正如@user3392484 所回答的那样。因此,将 jar 添加到 CLASSPATH 环境变量并不能解决问题。
          【解决方案6】:

          我在更新我的 Eclipse STS 后遇到了这个错误,结果我的服务器在更新期间忘记了它的所有配置信息。我不得不重新设置服务器的类路径和环境变量,这解决了问题。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-01-11
            • 2014-04-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多