已知 数据库内 有 多条记录 可直接执行 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,记得散发,呵呵!
------其他解决方案--------------------