JDBC MSSQL类加载编译错误[重复]

Posted

技术标签:

【中文标题】JDBC MSSQL类加载编译错误[重复]【英文标题】:JDBC MSSQL class loading compilation error [duplicate] 【发布时间】:2019-08-28 03:31:08 【问题描述】:

我一直在尝试在 IntelliJ 上运行以下代码,但即使我尝试将 MSSQL JDBC 驱动程序添加到模块依赖项或全局库中,它似乎也不起作用。

public class Main 
public static void main(String[] args) 
    testConnection();


public static boolean testConnection() 
    final String DEFAULT_DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    try 
    Class.forName(DEFAULT_DRIVER_CLASS);
    Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;database=testApp");
    String query = "Select * from Employee";
    Statement st = con.createStatement();
    ResultSet rs = st.executeQuery(query);
    if (rs!=null)
        System.out.println(rs);
        return true;
        
        System.out.println(rs);
        return false;
    
    catch (ClassNotFoundException e)
        e.printStackTrace();
        return false;
    
    catch (SQLException e)
        e.printStackTrace();
        return false;
    


好像一直有SQLException,这是堆栈跟踪:

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user ''. ClientConnectionId:1e971545-e8a0-4361-b033-29758a00df94
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:258)
at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:104)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:5036)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3668)
at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3627)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7194)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2935)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2456)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2103)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1950)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1162)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:735)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:251)
at Main.testConnection(Main.java:16)
at Main.main(Main.java:9)

我从数据源复制了 url 并将其用于 getConnection()。

【问题讨论】:

将您的代码和堆栈跟踪直接发布到问题中。没有图像或屏幕截图。 您是否尝试解决其他编译错误?您可以使用 try-catch 临时包围数据库连接逻辑。 我刚刚编辑了我上面的帖子,希望对您有所帮助。只有一个编译错误是 jdbc。 这是一个编译错误。它与 JDBC 或 MSSQL“不工作”无关。注意 Class.forName() 行自 2007 年以来就不再需要了。 我已经编辑了我的问题以澄清我的问题,很抱歉给大家带来了困惑 【参考方案1】:

问题在于testConnection 方法的方法签名。写在下面;

public boolean testConnection() throws Exception 
   ...

在你的main 方法中也做同样的事情。

【讨论】:

感谢您的回复,但问题是 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");应该能够找到“com.microsoft.sqlserver.jdbc.SQLServerDriver”类,因为我已将 jbdc 驱动程序(jar 文件)添加为库或模块依赖项。您的解决方案只是一种解决方法,因此代码可以编译,但我想连接到数据库。 @TienNguyen 不。这不是“解决方法”,而是需要更改代码。目前您唯一的问题是您的代码无法编译,这将解决它。你不知道你是否可以连接,直到你解决这个问题你才能知道。吵架前先试试。最好声明所有可以抛出的实际异常,包括ClassNotFoundException,而不是仅仅声明throws Exception 很抱歉,我刚刚尝试按照您所说的捕获异常。我完全是个菜鸟,我之前确实误解了你。我已经编辑了我的问题,如果你能看看并帮助我解决问题,我将不胜感激。

以上是关于JDBC MSSQL类加载编译错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

最终类的编译器错误实例[重复]

C ++编译器错误中的简单类继承[重复]

使用 mysql 运行 JDBC 程序时出现此错误 [重复]

另一个类中的方法“不存在”编译器错误[重复]

尝试在类构造函数中初始化 std::thread 时出现编译器错误 C2064 [重复]

在类中使用自定义排序时出现编译错误 [重复]