【问题标题】:Not able to assign values List<Object[]> values to ArrayList of specific type无法将值 List<Object[]> 值分配给特定类型的 ArrayList
【发布时间】:2014-07-24 14:57:35
【问题描述】:

我在方法 BillnAmountFetch 中从数据库中获取数据并在 main 方法中获取值我想将获取的 velue 分配给 arrayList ar

我从数据库中获取数据的代码

public List<Object[]> BillnAmountFetch(long cid) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        List<Object[]> obj = null;
        try {
            String hql = "select count(billNo), sum(total), invoiceDate from BillDetails "
                    + "where client.id=:cid "
                    + "group by invoiceDate  "
                    + "order by invoiceDate DESC";

            Query query = session.createQuery(hql);
            query.setParameter("cid", cid);
            obj = query.list();
            tx.commit();

        } catch (HibernateException e) {
            if (tx != null) {
                e.printStackTrace();
                tx.rollback();
            }
        } finally {
            session.close();
        }
        return obj;
    }

以下是我打印从上述方法接收到的数据的代码

public static void main(String[] args) {
        BillDAO bdo = new BillDAO();
        List<Object[]> lst = bdo.BillnAmountFetch(1);
        BillDetails bd = new BillDetails();
        ArrayList<BillDetails> ar = new ArrayList<BillDetails>();
        Object[] count = lst.get(0);
        Object[] amount = lst.get(1);
        Object[] invoice_dts = lst.get(2);
        System.out.println("-----------Total Bills---------- ");
        for (int x = 0; x < count.length; x++) {
            System.out.println("Total bills " + count[x]);
        }
        System.out.println("-------Total Amount--------- ");
        for (int x = 0; x < amount.length; x++) {
            System.out.println("Amount " + amount[x]);
        }
        System.out.println("----------Total Invoice date---------- ");
        for (int x = 0; x < invoice_dts.length; x++) {
            System.out.println("dates " + invoice_dts[x]);
        }
}

上述程序的输出是

-----------Total Bills---------- 
Total bills 3
Total bills 7281.00
Total bills 2014-07-15
-------Total Amount--------- 
Amount 7
Amount 14841.00
Amount 2014-07-12
----------Total Invoice date---------- 
dates 3
dates 1294.00
dates 2014-07-11

BillDetails.java

public class BillDetails implements java.io.Serializable {

   private Date invoiceDate;
   private long totalBills;
   private BigDecimal totalAmount; 
   //getter and setter
}

如何正确地将值分配给ArrayList 对象ar

编辑:如果无法在 ar 中分配,那么我们可以将所有计数分配给一个数组或列表类似的其他数组。 我必须在 jsp 页面中显示值。

【问题讨论】:

    标签: java arraylist


    【解决方案1】:

    我在方法 BillnAmountFetch 中从数据库中获取数据并在 main 方法中获取值我想将获取的 velue 分配给 arrayList ar

    您不能,您必须自己进行复制并适当地转换/转换元素。

    请注意,BillnAmountFetch 返回List&lt;Object[]&gt;(对象数组的列表),您是说要将其分配给ArrayList&lt;BillDetails&gt;

    所以这里有三个主要问题:

    • List&lt;Object[]&gt; 允许包含Object[] 实例,但ArrayList&lt;BillDetails&gt; 不允许包含Object[] 实例;列表中的项目必须是 BillDetails 实例。

    • List&lt;Object[]&gt; 可以是任何类型的列表(LinkedListStack),它不必是 ArrayList,但 ar 被声明为 ArrayList(特别是)。

    • BillDetails 似乎不太可能与 Object[](对象的数组)进行赋值兼容。

    【讨论】:

    • 任何其他方式,以便所有计数都应该在一个变量中(在数组或列表中)。金额和日期相同
    • 我已经回答了我的问题。它满足我的需要有没有更好的方法来做到这一点
    【解决方案2】:

    除了 T. J. Crowders 的建议之外,您还可以将模型实体映射为 Hibernate 实体,如下所示:

     @Entity
     public class BillDetails implements java.io.Serializable {
    
       // some other related annotations
    
       private Date invoiceDate;
       private long totalBills;
       private BigDecimal totalAmount; 
       //getter and setter
    
    }
    

    然后你可以通过 Hibernate 获得 ArrayList&lt; BillDetails &gt; 的自动绑定,当你这样做时:

      Query query = session.createQuery(hql , BillDetails.Class);
    

    不过,您需要进一步搜索:

    【讨论】:

      【解决方案3】:

      我得到了解决方案。我可能无法正确表达我的问题。 我想要Scalar results。 我想要的在下面

       public List<BillDetails> BillnAmountFetch(long cid) {
              Session session = HibernateUtil.getSessionFactory().openSession();
              Transaction tx = session.beginTransaction();
              ArrayList<BillDetails> ar = new ArrayList<BillDetails>();
              BillDetails bd = null;
              try {
                  String hql = "select count(billNo), sum(total), invoiceDate from BillDetails "
                          + "where client.id=:cid "
                          + "group by invoiceDate  "
                          + "order by invoiceDate DESC";
      
                  Query query;
                  query = session.createQuery(hql);
                  query.setParameter("cid", cid);
      
                  Iterator results = query.list().iterator();
                  while (results.hasNext()) {
                      Object[] row = (Object[]) results.next();
                      Long count = (Long) row[0];
                      BigDecimal amount = (BigDecimal) row[1];
                      Date dt = (Date) row[2];
                      System.out.println(count + " " + amount + " " + dt);
                      bd = new BillDetails();
                      bd.setTotalBills(count);
                      bd.setTotalAmount(amount);
                      bd.setInvoiceDate(dt);
                      ar.add(bd);
                  }
                  System.out.println("--------------------------");
                  tx.commit();
      
              } catch (HibernateException e) {
                  if (tx != null) {
                      e.printStackTrace();
                      tx.rollback();
                  }
              } finally {
                  session.close();
              }
              return ar;
          }
      
          public static void main(String[] args) {
              BillDAO bdo = new BillDAO();
              ArrayList<BillDetails> ar = (ArrayList<BillDetails>) bdo.BillnAmountFetch(1);
              System.out.println("In main method");
              for(BillDetails b:ar){
                 System.out.println(b.getTotalBills() + " " + b.getTotalAmount() + " " + b.getInvoiceDate());
              }
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-17
        • 2022-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多