我想将 ResultSet
值传输到 HashMap 然后添加它们,所以我最初执行了以下代码:
PreparedStatement pstmt=null;
ResultSet rs = null;
String query="SELECT record_id, SUM(ROUND(amtsourcedr, 2)) AS debit, SUM(ROUND(amtsourcecr, 2)) AS credit " +
"FROM adempiere.fact_acct " +
"GROUP BY record_id " +
"ORDER BY record_id ASC";
try
{
pstmt = DB.prepareStatement(query, null);
rs = pstmt.executeQuery();
while (rs.next())
{
int id = rs.getInt("record_id");
BigDecimal sourceDr = rs.getBigDecimal("debit");
BigDecimal sourceCr = rs.getBigDecimal("credit");
System.out.println(id);
System.out.println(sourceDr);
System.out.println(sourceCr);
MCUS_Exam exam = new MCUS_Exam(getCtx(), 0, null);
exam.setCUS_Record_ID(id);
exam.setCUS_AmtSourceDr(sourceDr);
exam.setCUS_AmtSourceCr(sourceCr);
exam.save();
}
是否可以通过java使用hashmap来对查询中找到的结果进行加法和舍入?如果是,那么我该如何继续做呢?
编辑: GROUP BY 实际上是我在 java 中复制时遇到困难的一个。
原表如下:
record_id amountdr amountcr
1000000 0 213.7544
1000000 0 270.00
1000000 483.7544 0
1000001 0 2250.6677
1000001 0 400.5050
1000001 0 12867.75
1000001 15518.9327 0
1000002 0 27000.6543
1000002 27000.6543 0
执行我给出的代码会将其添加到另一个表中:
record_id amountdr amountcr
1000000 483.75 483.75
1000001 15518.92 15518.93
1000002 27000.65 27000.65
最佳答案
您当然可以做到 - 您可以在数据库上执行的任何操作也可以在中间层上完成。我要问的问题是:对于此计算,哪一个是更好的选择?如果查询返回大量数据,我认为最好让数据库服务器来完成这项工作。仅仅为了添加和舍入而将大型数据集移动到中间层没有什么意义。
我的直觉是数据库非常适合这种计算。我看不出您有任何理由不允许它这样做。
但是,如果您必须的话,它可能如下所示:
Map<String, Double> rs = new HashMap<String, Double>();
// How will you duplicate the GROUP BY?
double sum = 0.0;
for (String key : rs.keySet()) {
sum += rs.get(key);
}
// Rounding is a display issue; I'd do it elsewhere
当你想到它时,Map 已经完成了 GROUP BY:键必须是唯一的。当您从 ResultSet 映射到 Map 时,您必须检查 Map 中是否已存在某个键。如果没有,则将新键及其值添加到 Map 中;如果是,则获取现有值,将当前 ResultSet 值添加到其中,然后将结果放回到该键的 Map 中。
关于java - 将 ResultSet 值传输到 HashMap 然后添加它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10294972/