簡體   English   中英

statement.executeQuery()之謎。 沒有執行代碼,也沒有捕獲異常。

[英]statement.executeQuery() mystery. Code not being executed, nor exception is being caught.

提供代碼和輸出。 搜索了互聯網,但沒有找到解決方案。 一切都可以編譯並正常運行,直到“ // PROBLEMATIC LINE ”為止,在這里直接執行到“ // HERE ”,而沒有任何指示,異常或錯誤。 我已經將此代碼與SQLServer的jdbc驅動程序一起使用了很多次,並且工作正常,這里可能遺漏了什么? 在同一個應用程序中,我還在mySql jdbc驅動程序中使用了此代碼,再次工作正常。 僅在這段代碼中就存在問題。 顯然我正在使用java.sql。*;

try {
        Class.forName(driver);
        setResponse("Failure. 1");
        connectionTest = DriverManager.getConnection(url, username, password);
        setResponse("Failure. 2");
        String query = "SELECT TOP (1) [id] FROM "+ table + ";";
        PreparedStatement statement = connectionTest.prepareStatement(query);
        setResponse("Failure. 3");
        System.out.println(statement);
        ResultSet resultset = statement.executeQuery();  //PROBLEMATIC LINE
        System.out.println("DOES NOT EVEN PRINT THIS");
        setResponse("Failure. 4");
        if (resultset.first()) setResponse("Success.");
        else setResponse("Failure. 5");
        System.out.println("Query success: ");  
        setResponse("Failure. 6");
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        try {
            connectionTest.close();  //HERE
            return getResponse();
        }
        catch (Exception e) {
            e.printStackTrace();
            return getResponse();
        }
    }

輸出:

------------------------------------
-------------DATABASES--------------
------------------------------------
SQLServerPreparedStatement:1
Failure. 3
------------------------------------
----------TESTS COMPLETED-----------
------------------------------------

引發異常時, try塊將退出。 try塊退出時,將執行finally塊。 由於您的finally塊中包含return語句,因此您永遠不會到達catch塊。

不要在您的finally塊中return 然后將顯示堆棧跟蹤,您可以處理異常。

正如其他人提到的那樣,您應該在嘗試捕獲方面做些不同。 我的建議:

try {
    Class.forName(driver);
    setResponse("Failure. 1");
    connectionTest = DriverManager.getConnection(url, username, password);
    setResponse("Failure. 2");
    String query = "SELECT TOP (1) [id] FROM "+ table ;
    PreparedStatement statement = connectionTest.prepareStatement(query);
    setResponse("Failure. 3");
    System.out.println(query);
    ResultSet resultset = statement.executeQuery(); 
    while ( resultset.next() {
        System.out.println("only one result because of 'top (1)': " + rs.getInt(1));
    }
     resultset.close();
     statement.close();
     connectionTest.close();        
} catch { SQLException sqlex) {
    System.out.println(getClass().getName() + " SQLException:  " + sqlex.getMessage();
}  catch (Exception e) {
    System.out.println(getClass().getName() + " GenericException:  " + e.getMessage();
     e.printStrackTrace();
}

而且,如果所有必需的庫都在類路徑中,尤其是JDBC-Driver,它應該可以正常運行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM