将数据库记录存储到列表中

如何将数据库记录放入ArrayList? 我想在jsp文件中查看它。 但是,ArrayList中所有对象的值与我选择的数据库中的最后一条记录相同。

我在我的项目中有这些代码:

IPBean.java

public class IPBean { private String ip; private String userName; private String password; private int maxRetry; public String getIp() { return ip; } protected void setIp(String ip) { this.ip = ip; } public String getUserName() { return userName; } protected void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } protected void setPassword(String password) { this.password = password; } public int getMaxRetry() { return maxRetry; } protected void setMaxRetry(int maxRetry) { this.maxRetry = maxRetry; } } 

IPBeanMapper.java

 import java.sql.*; import java.util.ArrayList; public class IPBeanMapper { public ArrayList getIPList() throws SQLException, ClassNotFoundException { ArrayList ipList = new ArrayList(); Connection conn = null; conn = ConnectionTools.getConnection(); String SQL = "SELECT * FROM LIST_IPM"; Statement statement = conn.createStatement(); ResultSet rs = statement.executeQuery(SQL); IPBean ipBean = new IPBean(); while (rs.next()){ ipBean.setIp(rs.getString("IP")); ipBean.setMaxRetry(rs.getInt("NUM_OF_RETRY")); ipBean.setPassword(rs.getString("PASSWORD")); ipBean.setUserName(rs.getString("USERNAME")); ipList.add(ipBean); } ConnectionTools.attemptClose(rs); ConnectionTools.attemptClose(statement); ConnectionTools.attemptClose(conn); System.out.print(ipList.size()); return ipList; } } 

view.jsp的

     DSIP.Insert     
<% ArrayList list; list = ipList.getIPList(); for (int i = 0; i
ip
username
password
maxRetry
<input name="ip" type="text" size="15" value=""> <input name="userName" type="text" size="15" value=""> <input name="password" type="text" size="15" value=""> <input name="maxRetry" type="text" size="15" value="">

并且我的浏览器中的结果显示第一个和第二个记录是不确定的,而实际上并不相同。 所以,请有人帮我展示数据库中的真实记录。

看到我的结果: http : //i.stack.imgur.com/2lIM9.png

非常感谢你帮助我。

最好的祝福,

Faizal Rizky

更改

  IPBean ipBean = new IPBean(); while (rs.next()){ 

  while (rs.next()){ IPBean ipBean = new IPBean(); 

这将在每行创建新实例,这是必需的,否则它将在单个实例中保持覆盖数据

你需要把这个IPBean ipBean = new IPBean(); 在里面循环

所以你的代码将成为 –

IPBeanMapper.java

 while (rs.next()){ IPBean ipBean = new IPBean(); . . 

在列表中添加相同对象引用的问题。 所以所有初始条目都与你最后一条记录相同。

我认为你不必把整个

 ipBean bean = new IPBean(); 

进入循环。 那将是一个糟糕的做法。 只是声明

ipBean ipBean;

 while(rs.next()){ bean = new ipBean(); } 
  IPBean ipBean = new IPBean(); while (rs.next()){ ipBean.setIp(rs.getString("IP")); 

您需要为每一行创建一个新实例。 在循环内移动new IPBean 。 否则,您将在列表中多次使用相同的实例,并使用您在上一次迭代中设置的值。