【问题标题】:Error message "java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver" is shown when run java on command line在命令行上运行 java 时显示错误消息“java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver”
【发布时间】:2021-07-20 00:22:41
【问题描述】:

我正在尝试在命令行上运行 java 程序,但显示此消息:

java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

然后我搜索了几个小时,大多数解决方案都是关于检查

  1. Java 版本,
  2. 导入 JDBC jar 并
  3. 编辑类路径

对于 1,我检查了我使用的 java 版本是 1.8

所以对于 2,我已经下载了 sqljdbc41.jar ,将 jar 放入 lib 文件夹,然后运行命令:

java -cp C://Testing/lib/* -classpath . sampleJava

对于 3,我已将类路径编辑为 C://Testing/lib/sqljdbc41.jar

有人知道我是否遗漏了某些东西,所以仍然显示相同的错误消息?

下面是我运行的示例程序:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;

public class sampleJava {
  int x = 5;

  public static void main(String[] args) {
    sampleJava myObj = new sampleJava();
    try {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    } 
    catch (Exception e) {
            System.err.println("Got an exception! ");
            System.err.println(e.getMessage());
            System.err.println(e);
            System.out.println(e.toString());
            e.printStackTrace();
        }
    finally {           
                System.out.println("Done");
        }
    System.out.println(myObj.x);
  }
}

【问题讨论】:

  • 您是否尝试过在类路径中使用反斜杠字符?即:C:\Testing\lib\sqljdbc41.jar?
  • 谢谢。我在上面打了一个错字,我实际上是在使用 C:\Testing\lib\sqljdbc41.jar
  • 与您的问题无关,但 sqljdbc41 适用于 Java 7,并且已经很老了。如需更新的驱动程序,请访问docs.microsoft.com/en-us/sql/connect/jdbc/…

标签: java sql-server jdbc cmd classpath


【解决方案1】:

这应该会有所帮助

java -cp C:/Testing/lib/*; sampleJava

java -cp C:/Testing/lib/sqljdbc41.jar; sampleJava 

【讨论】:

  • 非常感谢。你拯救了我的一天。刚刚注意到我犯了一个愚蠢的错误,我忘记了 jar 后面的分号。
  • @metallic 我认为问题在于您使用了// 而不是/,而不是分号,它分隔了类路径上的元素,实际上并不属于类路径。
  • @MarkRotteveel 在我的 Windows 10 机器上使用 cmd 如果没有分号,它对我不起作用。它给了我错误 - “找不到或加载主类 sampleJava”
  • 有趣,一个空的类路径段似乎相当于.(所以-cp C:/Testing/lib/sqljdbc41.jar;.C:/Testing/lib/sqljdbc41.jar;是等价的;我不知道。
猜你喜欢
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多