2017-05-30 41 views
-2

我读数据库中MySql并在ArrayList存储的值,并将其返回错误的返回类型..给错误,在Java中

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类型的'电子邮件'..帮我找出这个错误..

+0

提示:如果发生异常会发生什么?在这种情况下应该做什么程序?这不是在这种情况下返回。检查所有可能的代码执行流程。 –

+1

作为旁注:[GENERICS](https://docs.oracle.com/javase/tutorial/java/generics/types.html),不要使用rawtypes .. – SomeJavaGuy

+0

您正在将它们返回到try-block ,当发生异常时你不会返回任何东西。您可以在catch块中或仅在方法结束时返回null,具体取决于方法的目标是什么。 – RedSonja

回答

1

而不是在你的内部创建你的数组尝试范围,在你的方法范围内创建它,然后在你的程序结束时返回它,这样你就可以使用某些东西像这样:

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 
} 

另一件事情,以避免任何语法错误,或SQL注入,我建议在使用PreparedStatement相反,它是更安全,更有益的,例如:

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; 
} 
+0

非常感谢..! –

+0

欢迎您没问题@deepakasai –