Given the structure of the STUDENT table:



Student (id INTEGER, name VARCHAR)

Given:

public class Test {

    static Connection newConnection = null;

    public static Connection getDBConnection() throws SQLException {
        try (Connection con = DriverManager.getConnection(URL, username, password)) {
            newConnection = con;
        }
        return newConnection;
    }

    public static void main(String[] args) throws SQLException {
        getDBConnection();
        Statement st = newConnection.createStatement();
        st.executeUpdate("INSERT INTO student VALUES (102, 'Kelvin')");
    }
}

Assume that:

The required database driver is configured in the classpath.
The appropriate database is accessible with the URL, userName, and passWord exists.
The SQL query is valid.

What is the result?

A. The program executes successfully and the STUDENT table is updated with one record.
B. The program executes successfully and the STUDENT table is NOT updated with any record.
C. A SQLException is thrown as runtime.
D. A NullPointerException is thrown as runtime.

題解

Connection物件是try-with-resources結構的資源,因此在離開try-with-resources結構的try區塊時會自動呼叫其close方法。由於Connection已經close,所以在第14行,嘗試使用Connection物件來建立Statement物件時,會拋出SQLException。