在java中给出错误的返回类型时出错

在java中给出错误的返回类型时出错,java,mysql,jdbc,arraylist,Java,Mysql,Jdbc,Arraylist,我在MySql中读取数据库,并将值存储在ArrayList中并返回它 public ArrayList getData(String rule) { try { String q = "select distinct email_id from logs where rule ='" + rule + "';"; System.out.println(q); rs = st.executeQuery(q); ArrayLis

我在
MySql
中读取数据库,并将值存储在
ArrayList
中并返回它

public ArrayList getData(String rule) {
    try {
        String q = "select distinct email_id from logs where rule ='" + rule + "';";
        System.out.println(q);
        rs = st.executeQuery(q);
        ArrayList emails = new ArrayList();
        while (rs.next()) {
            emails.add(rs.getString("email_id"));
        }
        return emails;

    } catch (Exception e) {
        System.out.println("" + e);
    }
}

这段代码有什么问题。。它给出一个错误“它必须返回类型为
ArrayList
”的结果”。。但我只返回类型为
ArrayList
的“电子邮件”。。请帮助我找出此错误。

不要在try作用域中创建数组,而是在try之前在方法作用域中创建数组,然后在程序结束时返回数组,这样您就可以使用类似以下内容:

public ArrayList getData(String rule) {
    ArrayList emails = new ArrayList();//<<----create the list here
    try {
        String q = "select distinct email_id from logs where rule ='" + rule + "';";
        System.out.println(q);
        rs = st.executeQuery(q);
        //ArrayList emails = new ArrayList();<<--------don't create the list here
        while (rs.next()) {
            emails.add(rs.getString("email_id"));
        }
        //return emails;//<<-------don't return the result here
    } catch (Exception e) {
        System.out.println("" + e);
    }
    return emails;//<<-------return the list here
}

提示:如果发生异常会发生什么情况?在这种情况下,程序应该做什么?在那种情况下不是还回来了吗。检查所有可能的代码执行流程。请注意:,不要使用rawtypes..您在try块中返回它们,当发生异常时,您不会返回任何内容。根据方法的目标,可以在catch块中返回null,也可以在方法末尾返回null。
public ArrayList getData(String rule) throws SQLException {
    ArrayList emails = new ArrayList();//
    try (PreparedStatement pstm = connection.prepareStatement(
            "select distinct email_id from logs where rule = ?")) {
        //NOTE: Position indexes start at 1, not 0
        pstm.setString(1, rule);
        ResultSet rs = pstm.executeQuery();
        while (rs.next()) {
            emails.add(rs.getString("email_id"));
        }
    }

    return emails;
}