当前位置: 首页 > 面试题库 >

java中的ArrayList打印最后插入的值?

乐正乐湛
2023-03-14
问题内容

我有以下java类

package com.picvik.model;

import java.util.Date;

public class ViewAlbum {

private Integer albumid;
private String albumname;
private String description;
private String location;
private Date date;
private Integer uid;

public Integer getAlbumid() {
    return albumid;
}
public void setAlbumid(Integer albumid) {
    this.albumid = albumid;
}
public String getAlbumname() {
    return albumname;
}
public void setAlbumname(String albumname) {
    this.albumname = albumname;
}
public String getDescription() {
    return description;
}
public void setDescription(String description) {
    this.description = description;
}
public String getLocation() {
    return location;
}
public void setLocation(String location) {
    this.location = location;
}
public Date getDate() {
    return date;
}
public void setDate(Date date) {
    this.date = date;
}
public Integer getUid() {
    return uid;
}
public void setUid(Integer uid) {
    this.uid = uid;
}

}

我正在从数据库中检索数据并将其添加到我的数组列表中,如下所示

public ArrayList getAllAlbums(Integer uid) {
    ViewAlbum album = new  ViewAlbum();
    ArrayList<ViewAlbum>allAlbums = new ArrayList<ViewAlbum>();
    try {
        String qstring = "SELECT albumid, albumname, description, location," +
                " date, uid FROM picvik_picture_album WHERE " +
                "uid = '" + uid + "';";

        System.out.println(qstring);
        connection = com.picvik.util.MySqlConnection.getInstance().getConnection();
        ptmt = connection.prepareStatement(qstring);
        resultSet = ptmt.executeQuery();
        while(resultSet.next()) {
            //System.out.println(resultSet.getString("albumname"));
            album.setAlbumid(resultSet.getInt("albumid"));
            album.setAlbumname(resultSet.getString("albumname"));
            album.setDescription(resultSet.getString("description"));
            album.setLocation(resultSet.getString("location"));
            album.setDate(resultSet.getDate("date"));
            album.setUid(resultSet.getInt("uid"));
            allAlbums.add(album);
        }

        resultSet.close();
        ptmt.close();
        connection.close();


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

但是当我尝试打印存储在数组列表中的值时。它总是给我最后插入的记录。

<div class="row">
                <div class="span10">
                    <s:iterator value="allAlbums">
                        <s:property value="albumname"/>
                    </s:iterator>   
                </div>
            </div>

问题答案:

这里,

ViewAlbum album = new ViewAlbum();
// ...

while (resultSet.next()) {
    album.setAlbumid(resultSet.getInt("albumid"));
    // ...
    allAlbums.add(album);
}

您将album所有记录重复使用相同的实例。实例的数据在循环中每次都被覆盖。该列表不包含实例的副本,但包含单个实例的 引用
的副本。您知道,Java是面向对象的。

您应该为album每个记录创建一个新实例。将实例移到循环内部。

// ...

while (resultSet.next()) {
    ViewAlbum album = new ViewAlbum();
    album.setAlbumid(resultSet.getInt("albumid"));
    // ...
    allAlbums.add(album);
}

具体问题 无关 ,您应该在finally块中关闭JDBC资源,或者在try()try-with-
resources语句中打开它们,否则在执行查询或处理结果集期间发生异常时,它们仍会泄漏出去。您还应该将JDBC资源的声明移到方法块内部,否则也会遇到线程安全性问题。最后但并非最不重要的一点是,您应该使用setter方法PreparedStatement在SQL字符串中设置用户控制的变量。如果它们是字符串,那么您将有一个SQL注入攻击孔。



 类似资料:
  • 问题内容: 我有一个客户想打印的网页,而我遇到的麻烦是让页脚位于最后一个打印页面的底部,而不仅仅是内容结束时 我尝试了类似的东西 但它在每页末尾显示页脚。 也许我对CSS的要求太高了…可行吗? 我想我应该对 的(^_^)发疯 问题答案: 尝试将相对的身体和绝对的页脚定位: 借助CSS 3 Paged Media模块,您可以使用以下代码:

  • 问题内容: 我正在用Python编写程序,并希望将终端中打印的最后一个字符替换为另一个字符。 伪代码为: 我正在使用Windows8 OS,Python 2.7和常规解释器。 到目前为止,我看到的所有选项都不适合我。(例如:,(#为1),)。 这些选项是在其他Stack Overflow问题或其他资源中提出的,似乎对我不起作用。 编辑 :也使用不会改变影响。它只是不会擦除最后打印的字符。相反,使用

  • 问题内容: 我如何在arraylist“列表”中打印元素“ e”? 问题答案: 您是要打印整个列表还是要遍历列表的每个元素?两种打印您的类有意义的东西的方法都需要重写该类的方法(如其他答案所述)以返回有效结果。 此代码的输出是:

  • 目前控制台打印循环中的所有值,但只需要打印最后一个

  • 我有一个抽象的类,它有三个子类:、和。只有一个管理对象。 我还有一个类,它的“名称”是,它包含我需要的所有公共数据,如下所示: 让我们假设希望看到学生的列表:我这样称呼它: 它(eclipse)说: 类型Admin中的方法printList(ArrayList<>)不适用于参数(ArrayList<>) 我试着把它投给Person: 无法从ArrayList<>强制转换为ArrayList<> 在

  • 问题内容: 如何仅打印文件的最后一行? 问题答案: $ cat file | awk ‘END{print}’