【发布时间】:2019-03-06 18:26:23
【问题描述】:
我开始学习 java,但我的练习有问题。
这是整个代码的sn-p:
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
牙科 66
建筑 16
计算机科学 10
工程 11
架构 5
输出应该只是:
架构 61
工程 67
牙科 66
计算机科学 10
架构 5
我只是不知道该怎么做。我正在考虑使用 hashmap 或 hashset,但我不确定如何。感谢您的任何帮助,谢谢!
【问题讨论】:
-
使用sql的
group by -
您的输出表明您的源表中有多行集合,您希望在返回的结果中合并它们的结果 - 也称为 聚合。这正是聚合函数的目的,那么您为什么要避免使用专门为您的问题设计的工具呢?
-
是的,@Andronicus,除非有人试图避免聚合函数,正如 OP 所说的那样。
-
@JohnBollinger 对,在没有聚合函数的情况下进行聚合:) 拥有它们有什么意义?
标签: java sql oracle hashmap hashset