【问题标题】:How to add an element to an array of objects in Java如何在Java中的对象数组中添加元素
【发布时间】:2021-05-07 16:42:14
【问题描述】:

使用准备好的语句将数据插入 MySQL 数据库后,我检索了数据库为我创建的 ID。然后我想将该检索到的 ID 存储为数组的第一个对象的元素。

这些是我的类的属性:

private String DiskID;
private String Letter;
private String Label;
private String Type;
private String Health;
private String Op;
private String Size;
private String Remaining;

private List<Disk> diskTable = new ArrayList<>();

这是插入磁盘信息的方法:

public void insertDiskInfo(Connection conn){
    String query = "INSERT INTO Disk(DiskLetter, DiskName, FileSystemType, HealthStatus, OperationalStatus, DiskSize, DiskSpace)" +
            "VALUES(?,?,?,?,?,?,?);" ;

    String ReturnDiskID = "SELECT_LAST_INSERT_ID();" ;


    try{
        PreparedStatement ps = conn.prepareStatement(query);
        PreparedStatement ID = conn.prepareStatement(ReturnDiskID);

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

            ps.setString(1, diskTable.get(i).Letter);
            ps.setString(2, diskTable.get(i).Label);
            ps.setString(3, diskTable.get(i).Type);
            ps.setString(4, diskTable.get(i).Health);
            ps.setString(5, diskTable.get(i).Op);
            ps.setString(6, diskTable.get(i).Size);
            ps.setString(7, diskTable.get(i).Remaining);

            ps.addBatch();

            ResultSet rs = ID.executeQuery();

            if(rs.next()){

                diskTable.add(1, DiskID);
            }
            else {
                System.out.println("Failed to retrieve DiskID");
            }
        }
    }catch(Exception e){
        e.printStackTrace();
        e.getCause();
    }

如何将检索到的磁盘 ID 添加到第一个磁盘的第一个元素中?

【问题讨论】:

  • diskTable 在您的示例中不是数组。
  • @talex 我以为我已将其声明为数组列表?
  • 是的。 ArrayList 不是数组。这是数组的示例:int[] arr;
  • 您希望您的diskTable 列表同时包含 ID 和磁盘对象?为什么不单独存储 ID?
  • Array List 中每个 Disk 对象的 ID。当我更新数据库表中的信息时,我需要 diskID 来知道要更新哪个磁盘。我无法在创建 Disk 对象的同时分配它的原因是因为在整个企业的多台不同 PC 上存在多个此应用程序。因此计数器需要从数据库中计数,而不是应用程序。

标签: java mysql arrays object


【解决方案1】:

在第一个ArrayList 不支持这样的添加元素。 ArrayList 不是 array。 您声明 arrayList 来存储 Disk 对象,但像 Map(键、值)一样使用它。尝试使用map的一些实现(比如HashMap)来存储这样的对象

Map<Long, Disk> map = new HashMap();
map.put(disk.Id, disk);

【讨论】:

  • 这个语法对你来说是否正确:diskTable.put(rs.getString(1), diskTable.get(i));
  • 在你的情况下它会起作用,但我认为你应该重新设计这个类 - 现在看起来它有很多责任。现在您存储未插入到列表中的数据库对象。没关系。然后你想将它们插入数据库并收集具有某种结构的对象的键,以便通过键访问对象。因此,将其存储在地图中并像您在评论中写的那样放入。
  • 该列表存在的原因是因为我从 powershell 中获取信息,并且在将值插入数据库之前我需要在某个地方存储这些值。然后在插入数据库后,我有了他们的 ID。您是否建议为这两个函数使用单独的列表?
  • 对未插入的对象使用列表并映射到插入的对象 - 使用映射您可以通过 id 获取所需的对象,但使用列表您只有索引。一般来说 - 阅读 SOLID 原则。并尝试重新设计您的应用程序。大多数情况下,这取决于插入后您将如何处理磁盘。您可以使用未插入的对象更新列表中的每条记录,例如 `list.get(i).setId(rs.getInt(1)) 。
猜你喜欢
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多