当前位置: 首页 > 面试题库 >

设置类路径,但是:java.lang.ClassNotFoundException:com.microsoft.sqlserver.jdbc.SQLServerDriver

吕霄
2023-03-14
问题内容

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


问题答案:

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

执行以下一项操作:

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

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

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



 类似资料:
  • 我正在读这一行: format()方法做的第一件事是从名为output的类路径加载Velocity模板。虚拟机 请解释在这个上下文中类路径的含义,以及我应该如何设置类路径。

  • 问题内容: 我有一个独立的Java项目。我已经执行了Maven全新安装。现在,我通过命令提示符进入target \ classes文件夹,并在classpath中设置所有必需的文件。现在我执行主类。结果正在显示。 现在,我通过命令提示符移回目标文件夹,并尝试执行jar文件(jar文件具有在其中定义了主类的清单文件)。 现在,我得到以下异常。我也从上面的语句中删除了classpath属性,但仍然遇到

  • 问题内容: 从命令行,如何设置Java CLASSPATH选项以指向包含多个jar文件的一个或多个目录?是否有通配符支持递归目录和子目录? (我的JAR文件在几个子目录中排序。) 问题答案: 如果您使用的是Java 6或更高版本,则可以使用以下形式的通配符: 如果要添加所有子目录:lib \ a \,lib \ b \,lib \ c \,则除了以下以外,没有其他机制: 您想要完成的工作没有类似或

  • 问题内容: 我只是在读这行: format()方法要做的第一件事是从名为output.vm的类路径中加载Velocity模板 请解释在这种情况下类路径的含义,以及如何设置类路径。 问题答案: 使用Java进行编程时,可以通过在源文件的顶部放置类似的代码来使其他类对正在编写的类可用: 或者有时你通过说“批量导入”内容: 因此,稍后在你的程序中你说: Java虚拟机将知道在哪里可以找到你的已编译类。

  • 问题内容: 我正在运行Websphere Liberty 8.5。我的应用程序从文件系统中读取了通过Java CLASSPATH获得的一些文件,但我似乎找不到一种将目录从文件系统追加到读取的CLASSPATH的方法。我尝试过手动更改JAVA_CMD和JAVA_DEBUG,但是它们都不用。 有人知道这怎么可能吗? 问题答案: 不能修改JVM应用程序的类路径(通常通过JVM参数- classpath或

  • 我正在运行WebSphere Liberty 8.5。我的应用程序从文件系统中读取一些通过JavaCLASSPATH获取的文件,我似乎找不到将文件系统中的目录附加到CLASSPATH Liberty读取的目录中的方法。我尝试手动更改JAVA_CMD和JAVA_DEBUG,但都不起作用。 有人知道这怎么可能吗?