将数据库记录存储到列表中
如何将数据库记录放入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
并且我的浏览器中的结果显示第一个和第二个记录是不确定的,而实际上并不相同。 所以,请有人帮我展示数据库中的真实记录。
看到我的结果: 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
。 否则,您将在列表中多次使用相同的实例,并使用您在上一次迭代中设置的值。