因此,我使用JDBC连接到本地主机MySQL服务器,当我编写try块以连接服务器并发送查询时,我会收到一个'找不到符号'
错误。
我理解这是因为对象是在try条件内初始化的,并且我试图从finally条件中使用它,但是我也不能在try块外初始化它,因为我得到一个错误:'the try-with-resources resource must be a variable声明或表示final或有效final变量的表达式'
我试图编码的一般思想是,无论是否抛出异常,都能够在finally块中关闭与数据库的连接。 所讨论的代码如下(突出显示有错误的行):
public static String returnEmployeeName(String ID) throws ClassNotFoundException, SQLException {
HashMap<String, String> infoHR = connectionInfoHR();
String query = "SELECT first_name FROM employees WHERE employee_id = '" + ID + "'";
Class.forName("com.mysql.cj.jdbc.Driver");
Statement st;
ResultSet rs;
Connection con;
try (con = DriverManager.getConnection(infoHR.get("url"), infoHR.get("uname"), infoHR.get("pass"))) {
//Error on line above relating to not initialising the object within the statement
st = con.createStatement();
rs = st.executeQuery(query);
rs.next();
return rs.getString("first_name");
} finally {
st.close();
con.close();
}
}
提前为任何可以提供的帮助欢呼:)
我想你的意思是:
ResultSet rs;
try (Connection con = DriverManager.getConnection(infoHR.get("url"), infoHR.get("uname"), infoHR.get("pass"));
Statement st = con.createStatement()) {
//Error on line above relating to not initialising the object within the statement
rs = st.executeQuery(query);
rs.next();
return rs.getString("first_name");
}
请记住,您使用的是自动关闭连接的try-with-resources块。 您不需要在之前声明连接并在finnaly块中关闭它。
您需要更改代码,如下所示
try (Connection con = DriverManager.getConnection(infoHR.get("url"), infoHR.get("uname"), infoHR.get("pass")),
Statement st = con.createStatement()) {
//Error on line above relating to not initialising the object within the statement
rs = st.executeQuery(query);
rs.next();
return rs.getString("first_name");
}
Java 7-允许我们声明要在try块中使用的资源,并保证在执行该块之后资源将被关闭。
您可以在以下网址找到更多信息:https://www.baeldung.com/java-try-with-resources