java - 如何将具有重复属性的元组组合成一个元组?

标签 java mysql sql arraylist jdbc

我创建了一个与 SQL 数据库中的表同名的 Java 类,并使用从该表检索到的信息从该 Java 类创建了多个对象,并将它们存储在 ArrayList 中。

CREATE TABLE `orderdetails` (
  `orderNumber` int(11) NOT NULL,
  `productCode` varchar(15) NOT NULL,
  `quantityOrdered` int(11) NOT NULL,
  `priceEach` decimal(10,2) NOT NULL,
  `orderLineNumber` smallint(6) NOT NULL,
  PRIMARY KEY (`orderNumber`,`productCode`),
  KEY `productCode` (`productCode`),
  CONSTRAINT `orderdetails_ibfk_1` FOREIGN KEY (`orderNumber`) REFERENCES `orders` (`orderNumber`),
  CONSTRAINT `orderdetails_ibfk_2` FOREIGN KEY (`productCode`) REFERENCES `products` (`productCode`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

元组具有重复的 orderNumber,例如:

(10100,'S18_1749',30,'136.00',3),

(10100,'S18_2248',50,'55.09',2),

(10100,'S18_4409',22,'75.46',4),

然后将每个元组转换为与表同名的类的 java 对象,并存储在 Arraylist 中。

public ArrayList<OrderDetails> getOrders(String tableName) throws SQLException{
        ArrayList<OrderDetails>od=new ArrayList<OrderDetails>();

        try {
            String query="SELECT * FROM "+tableName;
            Statement s= con.createStatement();
            ResultSet rs= s.executeQuery(query);

            while(rs.next()) {

                int orderNumber=rs.getInt("orderNumber");
                String productCode=rs.getString("productCode");
                int quantityOrdered=rs.getInt("quantityOrdered");
                double priceEach=rs.getDouble("priceEach");
                int orderLineNumber=rs.getInt("orderLineNumber");

                OrderDetails temp=new OrderDetails(orderNumber, productCode, quantityOrdered, priceEach, orderLineNumber);
                od.add(temp);

            }

        }
        catch(SQLException e) {

            System.out.println("SQL exception happened while retriving data, close connection");

            throw new RuntimeException(e);  
        }
        return od;
    }

我试图循环遍历 ArrayList 并输出每个 checkNumber 的总值(value)(priceEach 乘以QuantityOrdered)。但如果我只是一个对象一个对象地循环遍历 ArrayList,那是行不通的。因为我只会在控制台上看到每个对象的总和,而不是每个 checkNumber。

ArrayList<OrderDetails>od= this.getOrders("orderdetails");
for(int i=0;i<=od.size();i++) {
         System.out.println(od.get(i).getPriceEach()*od.get(i).getQuantityOrdered());

     }

我期待类似的内容出现在控制台上(没有重复的 checkNumber)

CheckNumber 10100, total value: 8494.62 (if you add up the product between priceEach and quantityOrdered for the three tuples shown above earlier in my question is the rsult)

简而言之,有没有一种方法可以将具有重复属性的对象组合成一个? 如果我的问题看起来很模糊并且您不知道问题到底是什么,我深表歉意。 如果您尝试联系我并要求进一步说明,我们将不胜感激,有时很难描述过于具体的问题。

最佳答案

为什么不简单地在数据库中进行计算呢? SQL 是一种基于集合的语言,与 Java 中的迭代循环相比,它在此类操作中非常高效。

考虑以下聚合查询:

select orderNumber, sum(quantityOrdered * priceEach) totalValue
from mytable
group by orderNumber

这将为每个订单提供一条记录,以及所有相应行的总值。

关于java - 如何将具有重复属性的元组组合成一个元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61394110/

相关文章:

java - 捕获异常后返回 null 错误的设计

mysql 在单个查询中比较销售/购买

mysql - 管理大型 "work queues"/"input queues"的最佳方法?

sql - 使用 Clojure 插入 PostgreSQL 数组

sql - 多子级SQL查询

java - 对 Java 中的后期绑定(bind)/转换感到困惑

java - 为什么我的 Jersey 方法被调用两次?

java - 实体表错误 13037 : Illegal DOUBLE PREC constant

python - Scapy 奇怪的 Python 内存使用

mysql - 需要有关在 laravel 中使用的 select 语句的帮助