public ArrayList getAll() throws SQLException
{ ArrayList list=new ArrayList();
Connection con=c.getCon();
String sql="select * from student";
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sql);
while(rs.next())
{
String []st=new String[4];
st[0]=rs.getInt("id")+"";
st[1]=rs.getString("name");
st[2]=rs.getString("classGrent");
st[3]=rs.getString("result");
list.add(st);
}
return list;
}
/*为何Eclipse提示ArrayList必须要用泛型呢如下:
ArrayList<String[]> list=new ArrayList<String[]>();
如果用了泛型,我显示层的代码是:
<table width="451" height="79" border="1">
   <tr>
   <td>学号</td>
   <td>姓名</td>
   <td>班级</td>
   <td>成绩</td>
   <td>删除</td>
   <td>修改</td>
   </tr>
   <%
   ArrayList list=bean.getAll();
   for(int i=0;i<list.size();i++)
   {String st[]=(String[])list.get(i);
  %>
   <tr>
   <td>
   <%=st[1]%></td>
   <td>
   <%=st[2]%></td>
   <td>
   <%=st[3] %></td>
   <td>
   <a href="edit.jsp?id=<%=st[0]%>">修改</a>
   </td>
   <td>
   <a href="del.jsp?id=<%=st[0]%>">删除</a>
   </td>
   </tr>
   <%} %>
   </table>
中建立的ArrayList怎么写,这样写错了
*/

解决方案 »

  1.   

    1.ArrayList装载的类型是Object的,当你把任何类型(都是派生自Object)置于ArrayList中时不会有任何问题(向上转型),但是从ArrayList中取出时为Object,就要用到向下转型,这通常是不安全的,因此1.5、1.6之后推荐编码者在使用集合类时指定其泛型类型,使得容器只能操作某一类型的对象或其子类。此处的eclipse是建议你使用泛型,而不是强制。
    2.修改获取list的方法的出参为带有泛型指定的ArrayList类型,或者获取后强制转型。
      

  2.   

    不用泛型没问题,Eclipse这里只是警告,程序依然可以执行的。你的页面代码没什么问题啊,完全可以运行的。除开第一列有点错位,这样补上第一列:
      <tr>
    <td><%=st[0]%</td>
      <td>
      <%=st[1]%></td>
      <td>
      <%=st[2]%></td>
      <td>
      <%=st[3] %></td>
      <td>
      <a href="edit.jsp?id=<%=st[0]%>">修改</a>
      </td>
      <td>
      <a href="del.jsp?id=<%=st[0]%>">删除</a>
      </td>
      

  3.   


    public List<String[]> getAll() throws SQLException
    { List<String[]> list=new ArrayList<String[]>();
    Connection con=c.getCon();
    String sql="select * from student";
    Statement stmt=con.createStatement();
    ResultSet rs=stmt.executeQuery(sql);
    while(rs.next()){
    String []st=new String[4];
    st[0]=rs.getInt("id")+"";
    st[1]=rs.getString("name");
    st[2]=rs.getString("classGrent");
    st[3]=rs.getString("result");
    list.add(st);
    }
    rs.close();
    stmt.close();
    con.close();
    return list;
    }
    /*显示层的代码是:
    <table width="451" height="79" border="1">
      <tr>
      <td>学号</td>
      <td>姓名</td>
      <td>班级</td>
      <td>成绩</td>
      <td>删除</td>
      <td>修改</td>
      </tr>
      <%
      List<String[]> list=bean.getAll();
      for(int i=0;i<list.size();i++)
      {String st[]=list.get(i);
      %>
      <tr>
      <td>
      <%=st[1]%></td>
      <td>
      <%=st[2]%></td>
      <td>
      <%=st[3] %></td>
      <td>
      <a href="edit.jsp?id=<%=st[0]%>">修改</a>
      </td>
      <td>
      <a href="del.jsp?id=<%=st[0]%>">删除</a>
      </td>
      </tr>
      <%} %>
      </table>
    */
      

  4.   


    朋友,我注释里的ArrayList 这个怎么改
      

  5.   

     List<String[]>list=bean.getAll();
    这句依然报错啊
      

  6.   

    建议使用ArrayList<String[]> list=new ArrayList()<String[]>;
    你那样可能是在jsp强制转型为String[]时出错,不过为什么不把
    String []st=new String[4];
    st[0]=rs.getInt("id")+"";
    st[1]=rs.getString("name");
    st[2]=rs.getString("classGrent");
    st[3]=rs.getString("result");
    list.add(st);
    封装到一个对象,然后设置属性,最后list.add(对象),这样更好,使用数组也行,但这样更好。
      

  7.   

    第一,list变量前面要有空格
    第二,JSP要Import这个List接口
    <%page import="java.util.List" %>
    第三,bean要useBean进来
    <jsp:useBean id="bean" class="YourClass" />其他设想不出来还能出什么错。
      

  8.   

    对于集合类如List,map能用泛型就用泛型,为什么推荐呢,因为这样保证你在往里存值的时候就只允许你存固定的类型。保证符合你的要求。不容易误存,同时安全性也高。
      

  9.   

    朋友你说的很对,我忘了空格了,之后IDE没有提示错误,请问这个要放在Exception对象里面吗?为何运行还是这行错误:
    org.apache.jasper.JasperException: An exception occurred processing JSP page /List.jsp at line 3734:    <td>修改</td>
    35:    </tr>
    36:    <%
    37:    List<String[]> list=bean.getAll();
    38:    for(int i=0;i<list.size();i++)
    39:    {String st[]=(String[])list.get(i);
    40:   %>
      

  10.   

    什么异常?NullPointerException?还是别的?在36行之前要正确实例化bean变量,如用jsp:useBean标签。
      

  11.   

    1、getAll()不是静态方法,调用前应先将类实例化,ArrayList list = new bean().getAll();
    2、从ArrayList中读取数据一定要指定类型,String[] st = (String[])list.get(i);
    或者可以用另外一种方法
    for(Iterator i = list.iterator();i.hasNext();){
        String[] st = (String[])i.next();
    }
      

  12.   

    bean.getAll();返回类型是不是要强制类型转换啊?
    List<String[]> list=(List<String[]>)bean.getAll();
      

  13.   

    建议LZ建个pojo类比较好,举个列子
    public class Student{
    private int id;
    private String name;
    private String classGrent;
    private String result;
    // getter setter..
    }ArrayList<Student> list=new ArrayList<Student>();while(rs.next())
    {
    Student s=new Student();
    s.setId(rs.getInt("id"));
    s.setName(rs.getString("name"));
    s.setClassGrent(rs.getString("classGrent"));
    s.setResult(rs.getString("result"));
    list.add(s);
    }<table width="451" height="79" border="1">
      <tr>
      <td>学号</td>
      <td>姓名</td>
      <td>班级</td>
      <td>成绩</td>
      <td>删除</td>
      <td>修改</td>
      </tr>
      <%
      List<Student> list=bean.getAll();
      for(int i=0;i<list.size();i++)
      {Student s =list.get(i);
      %>
      <tr>
      <td>
      <%=s.getId();%></td>
      <td>
      <%=s.getName();%></td>
      <td>
      <%=s.getClassGrent(); %></td>
      <td>
      <a href="edit.jsp?id=<%=st[0]%>">修改</a>
      </td>
      <td>
      <a href="del.jsp?id=<%=st[0]%>">删除</a>
      </td>
      </tr>
      <%} %>
      </table>