下面的代碼工作正常:爲什麼在這種情況下不能使用try-with-resource?
String connStr = "jdbc:mysql://localhost:3306/addressbook";
try (Connection conn = DriverManager.getConnection(connStr, "root", "");
PreparedStatement ps = conn.prepareStatement("select * from contact where firstName=?");
) {
ps.setString(1, "Cippo");
ResultSet rs = ps.executeQuery();
while(rs.next()) {
System.out.print(rs.getString(2) + "\t");
System.out.print(rs.getString(3) + "\t");
System.out.print(rs.getInt(1) + "\t");
System.out.print(rs.getString(4) + "\t");
System.out.println(rs.getString(5));
}
} catch (SQLException e) {
e.printStackTrace();
System.exit(-1);
}
但是當我移動其他兩個指令進入試與 - 資源塊(其中他們應該留)一個神祕的原因,我得到一個編譯錯誤:
String connStr = "jdbc:mysql://localhost:3306/addressbook";
try (Connection conn = DriverManager.getConnection(connStr, "root", "");
PreparedStatement ps = conn.prepareStatement("select * from contact where firstName=?");
ps.setString(1, "Cippo");
ResultSet rs = ps.executeQuery();
) {
while(rs.next()) {
System.out.print(rs.getString(2) + "\t");
System.out.print(rs.getString(3) + "\t");
System.out.print(rs.getInt(1) + "\t");
System.out.print(rs.getString(4) + "\t");
System.out.println(rs.getString(5));
}
} catch (SQLException e) {
e.printStackTrace();
System.exit(-1);
}
編譯錯誤是不合理的:「ps無法解析」。但康恩解決沒有任何問題。爲什麼?
我認爲除了'try(...)'部分中的賦值操作外,我不能做任何事情,但我不確定。所以你的codenipet:'ps.setString(1,「Cippo」)'是在一個無效的地方。 – Quirin