gpt4 book ai didi

java - 不使用聚合函数删除sql中的重复项

转载 作者:行者123 更新时间:2023-12-02 10:10:30 26 4
gpt4 key购买 nike

我开始学习 Java,但我的练习遇到了问题。

这是整个代码的片段:

import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Connection;
import java.util.ArrayList;
import java.sql.PreparedStatement;

private static final int MAX_LINES = 44;

private static final int REPORT_COL1 = 30;
private static final int REPORT_COL = 15;

private ArrayList<String> errors = new ArrayList<String>();
private ArrayList<String> detailReport = new ArrayList<String>();
private ArrayList<String> summaryReport= new ArrayList<String>();

String firstSortCode= (String) parameters.get("01");

if(firstSortCode==null || firstSortCode.trim().equals("")) {
errors.add("Missing required parameter 01");
invalidParameters= true;
}
else {
for(int i=0; i<SORT_CODES.length; i++) {
if(firstSortCode.equals(SORT_CODES[i][0])) {
pSort1 = SORT_CODES[i][1];
sort1Attr = SORT_CODES[i][2];
sort1GetDescTable = SORT_CODES[i][3];
sort1GetDescCode = SORT_CODES[i][4];
sort1GetDescValue = SORT_CODES[i][5];
val1 = firstSortCode + " - " + pSort1;
break;
}
}
if(pSort1.equals("")) {
errors.add("Invalid value '"+ firstSortCode + "' for parameter 01");
invalidParameters= true;
}
}

String mainSelectSQL ="SELECT shrdgmr_pidm, " +
" shrdgmr_levl_code, "+
" shrdgmr_grst_code, "
" NVL("+sort1Attr+", 'Not Reported') ";


mainSelectSQL =mainSelectSQL +
"FROM shrdgmr " +
"WHERE shrdgmr_pidm is not null " +

//Appends the ORDER BY clause
mainSelectSQL+= "ORDER BY "+sort1Attr;


//Executes the query and obtains the ResultSet
ResultSet rs= sqlStatement.executeQuery();

String sort1Desc= "***";
String Sort1Prev= "*";

//Arrays to hold the student counts for each of the reported sort values
int sort1Count= 0;

int grandTotal = 0;

while(rs.next()) {
String Value1 = rs.getString(2);

if(!Value1.equals(prevSort1Value)) {


String sort1Record= Library.lPad(sort1Count, REPORT_COL, ' ');

if(!sort1Desc.equals("***")) {

if(lineCount[0]+4>MAX_LINES) {
startNewPage(detailReport, pageCount, lineCount, currentDate,
databaseName, pGradTerm, pInitiator, sort1Desc, pSort1, false);
}

detailReport.add(Library.rPad(sort1Desc, REPORT_COL1, ' ')+sort1Record);
summaryReport.add(Library.rPad(sort1Desc, REPORT_COL1, ' ')+sort1Record);
lineCount[0]++;
}
//Resets the counter
sort1Count =0;


sort1Desc= getSortDescription(connection, pSort1, sort1GetDescValue, sort1GetDescTable,
sort1GetDescCode, Value1, errors);
}
sort1Count++;

我的问题是如何合并重复的项目并总结它们的数量?

例如,我现在的代码只是在我的摘要报告中打印以下内容,

架构 40
工程56
dentry 66
架构16
计算机科学10
工程11
架构5

输出应该是:

架构61
工程67
dentry 66
计算机科学10
架构5

我只是不知道如何做到这一点。我正在考虑使用 HashMap 或哈希集,但我不确定如何使用。感谢任何帮助,谢谢!

最佳答案

如果实在不想在sql中使用聚合,可以使用HashMap<String, Integer> 。类似这样的事情:

Map<String, Integer> aggResult = new HashMap<>();
while (rs.next()) {
String name = rs.getString(NAME_INDEX); //NAME_INDEX - name column index
int value = rs.getInt(VALUE_INDEX); //VALUE_INDEX - value column index

aggResult.merge(name, value, Integer::sum);

//if you dont have java8 use this "if":
/*
if (aggResult.containsKey(name)) {
Integer sum = aggResult.get(name);
aggResult.put(name, sum + value);
} else {
aggResult.put(name, value);
}
*/
}
//test output:
aggResult.forEach((key, value) -> System.out.println(key + ": " + value));

也许您需要TreeMap (有或没有比较器)改为 HashMap对于顺序,对 ResultSet 或其他内容中的值进行 null 检查。

关于java - 不使用聚合函数删除sql中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55029880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com