用Java存储多个列表的最佳方法是什么?

时间:2019-11-29 07:42:30

标签: java hibernate

我正在使用某些xyz逻辑提取数据。提取后,每次迭代都会得到多个列表。

   for (int i= 0; i<= 5; i++) 
   {
          for (int j= 0; j<= 5; j++) 
          {
              //data extraction logic
             lList1.add(value1);
             lList2.add(value2);
             lList3.add(value3);
          }
         //in each iteration I am getting list different 
          System.out.println(" lList1 for iteration "+i+"is: "+lList1);
          System.out.println(" lList2 for iteration "+i+"is: "+lList2);
          System.out.println(" lList3 for iteration "+i+"is: "+lList3);
   }

我需要将这些列表传递给数据库。每个列表与db中的一列关联。
例如:lList1用于column1,lList2用于column2,lList3用于column3等

将这些列表传递给db或在Java中逐行写入这些值的最佳方法是什么 输出应该像

第一迭代列表值的行1 lList1 lList2 lList3等
第2次迭代列表值的第2行lList1 lList2 lList3等

有人可以帮忙吗?

5 个答案:

答案 0 :(得分:1)

您可以使用多维集合

ArrayList<ArrayList<Object>> a = new ArrayList<ArrayList<Object>>();

结果可能是这样(根据您的逻辑):

Multidimensional ArrayList: [[3, 4], [12, 13], [22, 23], [33,23]]

这是一个完整的示例:

ArrayList<ArrayList<Object>> list = new ArrayList<ArrayList<Object>>(); 
for (int i= 0; i<= 5; i++) {
    //if you got all the values 
    list.add(new ArrayList<Object>(Arrays.asList(value1, value2, value3))); 
    //else you have to fetch them from another loop
   for (int j= 0; j<= 5; j++) {
            list.add(new ArrayList<Object>()); 
            list.get(j).add(value1); 
          }
   }

答案 1 :(得分:1)

创建一个包含三个成员col1,col2和col3的类,并列出该类并使用它。

class MyRow
{
public {col1datatype} col1;
public {col2DataType} col2;
public {col3DataType} col3;
}

您的功能

 List<MyRow> lstRows = new ArrayList<MyRow>();

         for (int i= 0; i<= 5; i++) 
           {
                  for (int j= 0; j<= 5; j++) 
                  {
                    MyRow row = new MyRow(); 
                     row.col1 = value1;
                     row.col2 = value2;
                     row.col3 = value3;
                     llstRows.Add(row); 
                  }
            }

然后在数据库事务中相应地使用lstRows。

答案 2 :(得分:0)

我建议以下流程:

  • 首先检查每个列表的大小,并获取当前最大列表的大小,假设其lList3中包含10个元素。
  • 确保数据库中的列可以为空,这意味着它们可以为空
  • 使for循环运行10次(最大列表的长度),并在每个循环中将lList1 [i],lList2 [i]和lList3 [i]插入DB。当然,您将需要首先检查列表中是否存在当前索引,如果不存在,则为该列表列插入NULL。

这样,您将在数据库中拥有每一行,就像您稍后需要在前端列出它们一样。此外,进行任何数据搜索也将更加容易。

答案 3 :(得分:0)

在这种情况下,我建议将其序列化为Json并将其存储在列中(因为您将这种方法用于列表的列)。

从数据库检索数据时,只需将其从Json反序列化为List对象。

例如,Entity Framework在.NET中所做的相同

答案 4 :(得分:0)

如果所有列表包含相同的长度,则为所有ArrayList设置一个通用函数,并使用最大大小ArrayList的循环对其进行迭代: 它应该像: for(int i=0;i<lList1.size();i++) { String insertQueryMainProduct = "INSERT INTO " + "" + tableName + "" + "(ColumnOneName,ColumnSecondName,ColumnThirdName)" + " VALUES('" +lList1.get(i)+ "', '" + lList2.get(i)+ "', '" + lList3.get(i)+ "')"; System.out.println("Query: " + insertQueryMainProduct); statement.executeUpdate(insertQueryMainProduct); 希望对您有帮助