已知 数据库内 有 多条记录 可直接执行 select * from tablename; 可观察到
但 此段代码内的 select * from tablename 只能拿到 第一条记录 切 list.size()也是1个
代码如下:
public class dao { private static dao instance = new dao();

public static dao getInstance(){
return instance;
}

private dao() {

}

private static Connection getConnection() throws Exception{
Context initCtx = new InitialContext();
Context envCtx = (Context)initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/xe");
return ds.getConnection();
}

public List<bean> select(){

Connection conn = null;
String sql = null;
PreparedStatement pstm = null;
ResultSet rs = null;

List<bean> list = null;

try {
conn = getConnection();
sql = "select * from student";
pstm = conn.prepareStatement(sql);
rs = pstm.executeQuery();

if(rs.next()){
System.out.println("hello");

                                list = new ArrayList<bean>();
bean b = new bean();
b.setStudent_name(rs.getString(2));
b.setStudent_age(rs.getString(3));
b.setStudent_sexy(rs.getString(4));

list.add(b);
}
System.out.println(list.size()+"======");

rs.close(); pstm.close(); conn.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

return list;

}

}
问题:
  本人纠结在 当在外部执行 List<bean> select 方法时 只能打印出 一次"hello" 切 list.size也是1个 其他一切 运转正常 请求各位 大虾们 解释一二 为什么 rs.next 只能执行一次 

解决方案 »

  1.   

    LZ,你每次if(rs.next){
      这里都list=new ArrayList();
      这样肯定不行啊。
      每次有记录之后,你都重新创建了一个list
    }List<Bean> list=new ArrayList<Bean>();
    把这个放在if(rs.next)的前面!
      

  2.   

    建议LZ多debug模式进去多看看,你这个不是rs.next只执行了一次,是由于每次next之后生成了新的list,导致最后就一条记录!
      

  3.   

    不是 list 放在那里 的问题 无论放在那里 起码"hello" 得打印出 多个来 
    但现在 只能打印一个 根本就是 executeQuery() 只运行了 一次而已
      

  4.   


    我靠 犯了一个 具土的 错误 不能使用  if 循环 而是 使用while 死循环 一直到 rs.next 没有值为止
    该死的 循环 纠结了我 大半天的 时间
      

  5.   

    呵呵,LZ,这个也是,应该是while,我当时也没注意,呵呵,不过你的list也的设置成全局的,不能每次都new ArrayList.
    LZ,记得散发,呵呵!
      

  6.   

    使用循环,
    将list = new ArrayList<bean>();在控制语句外层New