我的结果如下:
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
这是我根据table name
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");
}
}
我真的不知道如何对值进行分组,我想从上面的结果中构建查询,如。
请帮我分组我将从分组值中查询查询的值。
我需要分组如下
tablename1
columnmaes
tablename2
columnnames
tablenameN
columnnames
请帮我实现这个目标,
此致
答案 0 :(得分:1)
您可以拥有Map<String, List<String>>
,其中key是表名,value是列名列表。
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);
}
}
现在resultsMap
将拥有tableNames和ColumnNames。
如果要存储其他信息(如顺序和大小),则需要创建一个bean并将其存储在像Map<String, List<YourBean>>
这样的表名中。
<强>更新强>
现在,您希望使用此resultMap
,
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());
}
现在queries
将包含所有必需的查询,因为您有多个查询,您需要处理Connection pooling
和所有问题,尝试使用JDBC Templates
这样的内容常见的所需操作,如DataSource, Connection pool, Automatic Bean Mapping
等。
希望这有助于你。