问个很菜的问题 谢谢

a5692408b 2010-03-30 02:56:56
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import model.Stu;
import util.JDBCUtil;

public class SelectFenYe {


public List selectFenYe(){
Stu stu = new Stu();
int i=0;
List list = new ArrayList();
try{
JDBCUtil jdbc = new JDBCUtil();
Connection conn=jdbc.getConnection();
String sql="select * from fenyeExample";
PreparedStatement pstm = conn.prepareStatement(sql);
ResultSet rs = pstm.executeQuery();
// System.out.print(sql);

while(rs.next()){
i++;
// int id = rs.getInt(1);
String uid=rs.getString(2);
String name=rs.getString(3);
String password = rs.getString(4);

stu.setUid(uid);
stu.setName(name);
stu.setPassword(password);
list.add(stu);

}
}catch(Exception e){
e.printStackTrace();
}

System.out.println("ssssssssssss"+i);
return list;
}
public static void main(String args[]){

SelectFenYe dao =new SelectFenYe();
List list =dao.selectFenYe();
Iterator iter = list.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}



}
}

我的意思是 把数据从数据库 全取出来,然后全部打印出来

我把数据全都放到LIst 里面 返回一List


我在数据库插了26条数据

然后我取的时候 怎么只取到了 最后一条数据

最后 我又循环的打印 可是循环了26次 都是最后一条数据

不知道为什么 怎么才能全部取出来啊 请教了
...全文
172 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zoeg 2010-03-30
  • 打赏
  • 举报
回复
果然是很菜的问题!
a5692408b 2010-03-30
  • 打赏
  • 举报
回复
都忘没了 谢谢大家
a5692408b 2010-03-30
  • 打赏
  • 举报
回复
谢谢了
xuhesheng 2010-03-30
  • 打赏
  • 举报
回复
ls的方法需要变成(Stu)(iter.next()).getName()才行
iter.next()返回的是Object类型
Object当然没有你那些方法了
需要转型后才能使用的

真是的
多看看API嘛
a5692408b 2010-03-30
  • 打赏
  • 举报
回复
点不出来
a5692408b 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 chenzhaohui555 的回复:]
public static void main(String args[]){

SelectFenYe dao =new SelectFenYe();
List list =dao.selectFenYe();
Iterator iter = list.iterator();
while(iter.hasNext()){
System.out.println(iter.next().……
[/Quote]

iter.next().getName 没有Name 啊
chenzhaohui555 2010-03-30
  • 打赏
  • 举报
回复
public static void main(String args[]){

SelectFenYe dao =new SelectFenYe();
List list =dao.selectFenYe();
Iterator iter = list.iterator();
while(iter.hasNext()){
System.out.println(iter.next().getName()); //取name的话
}
a5692408b 2010-03-30
  • 打赏
  • 举报
回复
就是加入 我只取 UID 我怎么取,我那个是一起取的 要是一个呢,还是这么写的话
chenzhaohui555 2010-03-30
  • 打赏
  • 举报
回复
Stu stu=null;
while(){
stu = new Stu()
。。。。。。
}


这样效率高一些,提高性能
a5692408b 2010-03-30
  • 打赏
  • 举报
回复
我在问一下 要是取单一个字段 怎么取
xuhesheng 2010-03-30
  • 打赏
  • 举报
回复
对不起,刚才解释错误了
我给当做另一个去处理的

因为实例只有一个
你在外面new的只有一个u
那么u就将指向堆中的那唯一的一个
你循环中的每一次都在修改的这个u其实是同一个

因为堆地址还是那唯一的那个
所以你添加的都是同一个

刚才我把它当作Map处理的
不好意思给你解释错了啊
kitajima-- 2010-03-30
  • 打赏
  • 举报
回复
//whiel些的有问题
方法一:
while(){|
Stu stu = new Stu()
。。。。。。
}
方法二://用数组做,返回Stu数组
Stu [] stu = new Stu()
while(){|
i++;
。。。。。。
stu[i].setUid(uid);
stu[i].setName(name);
stu[i].setPassword(password);
。。。。。。
}//OK
xuhesheng 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qiudan520 的回复:]
引用 6 楼 a5692408b 的回复:
引用 5 楼 soli11722984 的回复:
Stu stu = new Stu();这个放到re.next里面

你打出来的26条数据一定是最后那条吧


为什么我放在外面只存了一条啊 谢谢啊

因为while循环每次要创建实例一次啊,才能更新数据值
[/Quote]

这个跟list本身有关

比如使用Set的话嘛就可以重复添加了的
a21768541 2010-03-30
  • 打赏
  • 举报
回复
Stu stu = new Stu();
这个在外面的话 值实例化了一次
后面的值会覆盖前面的值..
bayougeng 2010-03-30
  • 打赏
  • 举报
回复
你的new写在外面,相对于每次都在对list[0]这个对象的引用进行修改。而不是新加入一条记录。
QIUDAN520 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 a5692408b 的回复:]
引用 5 楼 soli11722984 的回复:
Stu stu = new Stu();这个放到re.next里面

你打出来的26条数据一定是最后那条吧


为什么我放在外面只存了一条啊 谢谢啊
[/Quote]
因为while循环每次要创建实例一次啊,才能更新数据值
soli11722984 2010-03-30
  • 打赏
  • 举报
回复
因为你放在外面的时候只是有一个Stu实例,那个实例的引用就叫stu,然后rs.next的时候,你确实把26条数据都迭代出来了,不过你都是用stu.setXXX的方式,也就是说,你对Stu同一个实例操作了26次,你每次都是把同一个引用放到集合中去,当然最后你打印的时候,集合中的的所有元素都是指向同一个实例,也就是你看到26行数据都一样的效果

不过当你放到re.next下,就是每一次迭代,你都会去new一个Stu实例,再保存,这时那个集合保存的都不是同一个引用了

可能上面说的有点含糊,不过LZ,多去看看对象、实例等概念吧
xuhesheng 2010-03-30
  • 打赏
  • 举报
回复
你放在外面的话
实例化的只有一个
其实你每次都是在修改同一个对象
list真正添加的还是那个你在外面生成的对象
但是list在添加的时候会检验该对象的hash值
因为同一个对象
所以hash相同
于是就覆盖了

这个就是原因

放在里面的话没一个循环都new出来一个
于是hash不同
所以自然就可以添加进去了

我刚才没仔细看你的代码
ls的解决了你的问题就好了
注意以后要在内部new出来才行

PreparedStatement好像是有什么问题的
忘记了
我一直都不用的
除非要使用参数的情况下


a5692408b 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 soli11722984 的回复:]
Stu stu = new Stu();这个放到re.next里面

你打出来的26条数据一定是最后那条吧
[/Quote]

为什么我放在外面只存了一条啊 谢谢啊
soli11722984 2010-03-30
  • 打赏
  • 举报
回复
Stu stu = new Stu();这个放到re.next里面

你打出来的26条数据一定是最后那条吧
加载更多回复(4)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧