0

結果は次のとおりです。

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コードです。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

これを達成するために私を助けてください、

よろしく

4

1 に答える 1

1

Map<String, List<String>>キーがテーブル名になり、値が列名のリストになる場所を持つことができます。

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);
   }
}

これで、resultsMaptableNames と 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 TemplatesDataSource, Connection pool, Automatic Bean Mapping

于 2012-09-03T11:10:07.057 に答える