gpt4 book ai didi

java - MySQL - 必须被捕获或声明被抛出

转载 作者:太空宇宙 更新时间:2023-11-03 12:34:51 25 4
gpt4 key购买 nike

我已经尽可能好地从各种帖子中构建了这个类。

我正在尝试从 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() 调用您的方法。

因此,您有两个选择:-

  1. callerthrows 子句中声明异常:-

    public void caller() throws SQLException {
    ArrayList<String> players = database.LoadUsers();
    }
  2. 将方法调用包含在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com