需要帮助以java对DB中的记录进行分组吗
我的结果如下:需要帮助以java对DB中的记录进行分组吗,java,collections,Java,Collections,我的结果如下: tablename columnname size order employee name 25 1 employee sex 25 2 employee contactNumber 50 3 address name 25 4 address street 25 5 address
tablename columnname size order
employee name 25 1
employee sex 25 2
employee contactNumber 50 3
address name 25 4
address street 25 5
address country 25 6
这是我的java代码,用于根据表名对值进行分组
public void getReportQuery() {
String tablename="",columnname="";
int size=0,order=0;
boolean isCustomised=true;
StringBuffer sb = new StringBuffer();
Map<String, Map<String, String>> reportQueryMap = new HashMap<String, Map<String, String>>();
List<String> reportQueryTableNameList = new ArrayList<String>();
Connection connection = getConnection();
if (connection != null) {
try {
sb.append("SELECT rmaster.tablename,rmaster.columnname,r.size,r.order FROM report_customise_child r,report_customise_master rmaster where r.isactive='y' and rmaster.id=r.masterid; ");
PreparedStatement reportQueryPS = connection.prepareStatement(sb.toString());
ResultSet reportQuery_rst= reportQueryPS.executeQuery();
if(reportQuery_rst!=null){
while (reportQuery_rst.next()) {
tablename = reportQuery_rst.getString("tablename");
if (!reportQueryTableNameList.contains(tablename)) {
reportQueryTableNameList.add(tablename);
System.out.println("tablename : "+tablename);
}
columnname = reportQuery_rst.getString("columnname");
System.out.println(" columnname : "+columnname);
//size = reportQuery_rst.getInt("size");
//order = reportQuery_rst.getInt("order");
}
}else{
isCustomised=false;
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
closeConnection(connection, null, null);
} catch (Exception ex) {
ex.printStackTrace();
}
}
} else {
System.out.println("Connection not Established. Please Contact Vendor");
}
}
请帮助我实现这一目标
关于您可以使用映射
,其中键是表名,值是列名列表
Map<String, List<String>> resultsMap = new HashMap<String, List<String>>();
ResultSet reportQuery_rst= reportQueryPS.executeQuery();
if(reportQuery_rst!=null){
while (reportQuery_rst.next()) {
String tableName = reportQuery_rst.getString("tablename");
List<String> columns = resultsMap.get(tableName);
if(columns == null ) {
columns = new ArrayList<String>();
resultMap.put(tableName, columns);
}
columns = resultsMap.get(tableName);
String columnName = reportQuery_rst.getString("columnname");
columns.add(columnName);
}
}
现在,querys
将拥有所有必需的查询,因为您有几个查询,您需要处理连接池
,并且尝试使用类似于JDBC模板的东西,它将提供大多数常见的必需操作,如数据源、连接池、自动Bean映射
等。
希望这对你的工作有帮助 您还需要其他值吗?我是说。。大小及order@Rp感谢您的努力,是的,但如果我将它们单独收集,如列名、顺序和大小,这将非常有用。将查询更改为SELECT rmaster.tablename,rmaster.columnname,r.size,r.order FROM report\u customize\u child r,报告_customize_master rmaster,其中r.isactive='y'和rmaster.id=r.masterid按rmaster.tablename排序代码>25个字符表示“性”。。。kinky…@Philipp这是示例记录,不是原始记录,只是为了测试,请避免此类评论,如果您有任何问题,请要求澄清无问题,拍摄您的问题谢谢,现在我有了表名和列名,如何从结果映射构造select查询?如select employee.name,…从EMPLOYOYEE,地址。抱歉,浪费了您宝贵的时间。更新了我的答案,这将提供一个提示。它提供了两个查询,但我只需要一个查询。您有两个不同的表名,因此它提供了两个不同的查询,您想加入这两个表吗?像从第一个表中选择几列,从第二个表中选择几列在某些条件下从第一个表内部连接第二个表一样
??
Map<String, List<String>> resultsMap = new HashMap<String, List<String>>();
ResultSet reportQuery_rst= reportQueryPS.executeQuery();
if(reportQuery_rst!=null){
while (reportQuery_rst.next()) {
String tableName = reportQuery_rst.getString("tablename");
List<String> columns = resultsMap.get(tableName);
if(columns == null ) {
columns = new ArrayList<String>();
resultMap.put(tableName, columns);
}
columns = resultsMap.get(tableName);
String columnName = reportQuery_rst.getString("columnname");
columns.add(columnName);
}
}
List<String> queries = new ArrayList<String>();
for(Entry<String, List<String>> resultEntry : resultMap.entrySet()) {
String tableName = resultEntry.getKey();
List<String> columns = resultEntry.getValue();
StringBuilder query = new StringBuilder(" select ");
int i = 0;
for(String column : columns) {
query.append(column);
if(i != columns.size()) {
query.append(", ");
}
i++;
}
query.append(" from ").append(tableName);
queries.add(query.toString());
}