当前位置: 代码迷 >> J2EE >> 有关 jsp model2 的执行 sql 语句有关问题
  详细解决方案

有关 jsp model2 的执行 sql 语句有关问题

热度:1061   发布时间:2016-04-22 00:12:13.0
有关 jsp model2 的执行 sql 语句问题
已知 数据库内 有 多条记录 可直接执行 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 只能执行一次 
------最佳解决方案--------------------
LZ,你每次if(rs.next){
  这里都list=new ArrayList();
  这样肯定不行啊。
  每次有记录之后,你都重新创建了一个list
}

List<Bean> list=new ArrayList<Bean>();
把这个放在if(rs.next)的前面!
------其他解决方案--------------------
建议LZ多debug模式进去多看看,你这个不是rs.next只执行了一次,是由于每次next之后生成了新的list,导致最后就一条记录!
------其他解决方案--------------------
楼上正解,应该把list设全局
------其他解决方案--------------------
不是 list 放在那里 的问题 无论放在那里 起码"hello" 得打印出 多个来 
但现在 只能打印一个 根本就是 executeQuery() 只运行了 一次而已


------其他解决方案--------------------

我靠 犯了一个 具土的 错误 不能使用  if 循环 而是 使用while 死循环 一直到 rs.next 没有值为止
该死的 循环 纠结了我 大半天的 时间
------其他解决方案--------------------
呵呵,LZ,这个也是,应该是while,我当时也没注意,呵呵,不过你的list也的设置成全局的,不能每次都new ArrayList.
LZ,记得散发,呵呵!
------其他解决方案--------------------