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

标签 java mysql sql

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

我正在尝试从 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/

相关文章:

java - 获取 java.lang.StringIndexOutOfBoundsException 错误

mysql - 连接表时 'field list' 中的未知列 xxx(MySQL、MariaDB)

mysql - 如何合并两个mysql查询

mysql - 我应该用什么代替 IN?

sql - 使用 Postgres 一次在 3 个表中插入数据

sql - 无法对 SQL Server 中的所有行应用计算

java - DocumentFilter 不监听变化怎么办?

c# - 为什么我不应该*覆盖 GetHashCode()?

java - 如何在不使用arraylist的情况下只选择一次随机字符串

mysql - 根据另一个表的结果刷新表