为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我查询出来的值,会被下一条语句中的值覆盖啊,每次查询出来的所有数据,都是最后一条数据

List<Message> messageList = new ArrayList<Message>();

try {

Class.forName("com.mysql.jdbc.Driver");

Connection connection;

connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/micro_message","root","root");

StringBuilder sql = new StringBuilder("select id,command,desription,content from message where 1=1");

List<String> paramList = new ArrayList<String>();

if(command != null && !"".equals(command.trim())){

sql.append("and command=?");

paramList.add(command);

}

if(desription != null && !"".equals(desription.trim())){

sql.append("and desription like '%' ? '%' ");

paramList.add(desription);

}

PreparedStatement statement = connection.prepareStatement(sql.toString());

for(int i=0;i<paramList.size();i++){

statement.setString(i + 1,paramList.get(i));

}

ResultSet rs = statement.executeQuery();

Message message = new Message();

while(rs.next()){

message.setId(rs.getString("id"));

message.setCommand(rs.getString("command"));

message.setDesription(rs.getString("desription"));

message.setContent(rs.getString("content"));

messageList.add(message);

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

}catch (SQLException e) {

e.printStackTrace();

}

return messageList;


正在回答

3 回答

Message message = null;

while(rs.next()){

 message = new Message();

message.setId(rs.getString("id"));

message.setCommand(rs.getString("command"));

message.setDesription(rs.getString("desription"));

message.setContent(rs.getString("content"));

messageList.add(message);

}

每次循环都要新声明一个对象,你那样写其实就只声明了一个message 对象。

1 回复 有任何疑惑可以回复我~
#1

慕用9049269 提问者

非常感谢!
2016-08-19 回复 有任何疑惑可以回复我~
#2

慕姐3016913

请问为什么覆盖之后,查询个数却是对的呢
2017-06-19 回复 有任何疑惑可以回复我~

谢谢楼上的答案,我纠结了几天了,真是豁然开朗啊


0 回复 有任何疑惑可以回复我~

这个初学者经常碰到,我以前也是,一般把新生成的对象放到循环里就ok了!

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么我查询出来的值,会被下一条语句中的值覆盖啊,每次查询出来的所有数据,都是最后一条数据

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信