我已经尽可能好地从各种帖子中构建了这个类。
我正在尝试从 MySQL 数据库中获取用户名列表。
这是检索它们的方法:
public ArrayList<String> LoadUsers() throws SQLException {
ArrayList<String> players = new ArrayList<String>();
try {
Connection conn = null;
ResultSet rs = null;
try {
conn = getConnection();
Statement s = conn.createStatement ();
s.executeQuery ("SELECT * FROM NFT_users");
rs = s.getResultSet ();
while(rs.next ()){
players.add(rs.getString("name"));
}
rs.close ();
s.close ();
}
catch (SQLException ex) {
System.out.println(ex.toString());
}
finally {
try {
if (conn != null) conn.close();
}
catch (SQLException ex) {
System.out.println("On close: " + ex.toString());
}
}
}
catch(Exception ex) {
//trace(ex);
}
return players;
}
这是我的主类中从方法中检索它的代码:
ArrayList<String> players = database.LoadUsers();
但是,我收到错误消息必须被捕获或声明为被抛出。我做错了什么?
最佳答案
你的方法:-
public ArrayList<String> LoadUsers() throws SQLException {
在其 throws 子句中声明了一个 SQLException
。因此,无论从哪个方法调用此方法,您都需要将 invocation
包含在 try-catch
block 中以处理此异常,或者在throws 也是该方法的子句。
因此,假设您从方法 caller()
调用您的方法。
因此,您有两个选择:-
在
caller
的throws
子句中声明异常:-public void caller() throws SQLException { ArrayList<String> players = database.LoadUsers(); }
将方法调用包含在 try-catch 中。在这种情况下,请记住先在 block 外声明您的
list
:public void caller() { ArrayList<String> players = null; try { players = database.LoadUsers(); } catch (SQLException e) { e.printStackTrace(); } }
请注意,如果您使用第一个选项,那么您将在调用caller
的方法中再次面临同样的问题。在那里你也必须遵循这个东西。
一般来说,方法内部引发的异常是 - 要么使用 try-catch block 在那里处理,要么向上传播堆栈跟踪到直接调用方方法,但不是两者。你正在用你的方法做这两件事。您正在处理该异常,并已在 throws
子句中声明将其抛出。你永远不应该那样做。
关于java - MySQL - 必须被捕获或声明被抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13653375/