gpt4 book ai didi

java - com.microsoft.sqlserver.jdbc.SQLServerDriver 的 ClassNotFoundException

转载 作者:行者123 更新时间:2023-12-01 11:10:17 25 4
gpt4 key购买 nike

这是一个已经出现的问题 before就这样,我确信经验丰富的 Java 开发人员已经厌倦了告诉新手如何设置类路径。也就是说,我尝试通过环境变量和 -cp 选项设置类路径,但没有成功。

我正在使用与 SQLServer JDBC 驱动程序捆绑在一起的示例应用程序。我运行的是 Ubuntu 14.10。我在命令行上编译应用程序:

javac -cp .:/path/to/sqljdbc42.jar connectURL.java 

然后运行它:

java connectURL

这让我看到了熟悉的ClassNotFoundException:

java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:191)
at connectURL.main(connectURL.java:42)

我没有修改示例类文件,但为了完整性我将其包含在此处:

import java.sql.*;

public class connectURL {

public static void main(String[] args) {

// Create a variable for the connection string.
String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
"databaseName=AdventureWorks;integratedSecurity=true;";

// Declare the JDBC objects.
Connection con = null;
Statement stmt = null;
ResultSet rs = null;

try {
// Establish the connection.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(connectionUrl);

// Create and execute an SQL statement that returns some data.
String SQL = "SELECT TOP 10 * FROM Person.Contact";
stmt = con.createStatement();
rs = stmt.executeQuery(SQL);

// Iterate through the data in the result set and display it.
while (rs.next()) {
System.out.println(rs.getString(4) + " " + rs.getString(6));
}
}

// Handle any errors that may have occurred.
catch (Exception e) {
e.printStackTrace();
}

finally {
if (rs != null) try { rs.close(); } catch(Exception e) {}
if (stmt != null) try { stmt.close(); } catch(Exception e) {}
if (con != null) try { con.close(); } catch(Exception e) {}
}
}
}

SQL JDBC .jar 的路径绝对正确。如果我将 import com.microsoft.sqlserver.jdbc.SQLServerDriver; 添加到类文件中,我在编译时不会收到任何投诉,但在运行时仍然会收到 ClassNotFoundException

我在其他地方读到,较新版本的 JDBC 不需要您通过 Class.forName 加载驱动程序,但是如果我删除该行,那么可以预见的是,我会得到 java .sql.SQLException:找不到合适的驱动程序

我做错了什么?我确信 .jar 正在加载并且该类正在找到,因为如果我尝试例如导入 com.microsoft.sqlserver.jdbc.SomeNonExistentClass; 我得到:

connectURL.java:2: 错误:找不到符号

我的 Java 详细信息:

$ java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-0ubuntu0.14.10.2)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

最佳答案

你已经成功了一半。编译时将 JDBC JAR 包含在类路径中,但执行时也需要将其包含在类路径中:

java -cp .:/path/to/sqljdbc42.jar connectURL

关于java - com.microsoft.sqlserver.jdbc.SQLServerDriver 的 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32459245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com