2017-01-23 29 views
1

複数のテーブルを作成し、私はのように見えるXML入力ファイルがあります。XMLを読み込むと

:私はのように見える 'MBeanに' と呼ばれるPOJOを作成しました

<mbean className="OperatingSystem"> 
    <attribute> 
     <attributeName>Arch</attributeName> 
     <formatter>STRING</formatter> 
    </attribute> 
    <attribute> 
     <attributeName>ProcessCpuLoad</attributeName> 
     <formatType>PERCENT</formatType> 
    </attribute> 
</mbean> 

XMLファイルをこのPOJOにアンマーシャリングすることができます。私のアプリケーションでは、このオブジェクトを旧式として使用できますded。この入力ファイルは、私が持っている特定のMBeanから引き出す必要のある情報を示します。上記の情報をプルすると、その情報をテーブル構造に格納し、JDBCを使用してH2データベースにSQLテーブルを作成できるように、XMLファイルに基づいて複数のテーブルを作成する方法はありますか?私が最初になるだろう

+------------------------+ 
|  MBeans   |  
+------+-----------------+ 
| ID | MBeanName  | 
+------+-----------------+ 
| 1 | OperatingSystem | 
+------+-----------------+ 

+--------------------------------+ 
|  Attributes    | 
+------+--------+----------------+ 
| ID | MbeanId| AttributeName | 
+------+--------+----------------+ 
| 1 | 1 | Arch   | 
+------+--------+----------------+ 
| 2 | 1 | ProcessCpuLoad | 
+------+--------+----------------+ 

+------------------------------------+ 
|  OperatingSystem.Arch  | 
+------+--------+------------+-------+ 
| ID | MbeanId| AttributeId| Value | 
+------+--------+------------+-------+ 
| 1 | 1 | 1  | amd64 | 
+------+--------+------------+-------+ 
| 2 | 1 | 1  | amd64 | 
+------+--------+------------+-------+ 

+------------------------------------+ 
| OperatingSystem.ProcessCpuLoad  | 
+------+--------+------------+-------+ 
| ID | MbeanId| AttributeId| Value | 
+------+--------+------------+-------+ 
| 1 | 1 | 2  | 0.009 | 
+------+--------+------------+-------+ 
| 2 | 1 | 2  | 0.0691| 
+------+--------+------------+-------+ 

答えて

1

例えば、私は次のようになり、テーブルを作成したいテーブル名public String getTableName(String className)

  • 方法マッピングattributeName

    • 方法マッピングclassNameをクロムン名にpublic String getColumnName(String attributeName)
    • メソッドマッピングformatTypeまたはformatterデータベースの種類public String getType(String formatType)

    にして、

    public void createTable(Mbean bean) throws SQLException{ 
        String sql = getCreateTable(bean); 
        // execute SQL using JDBC... 
    } 
    
    private String getCreateTable(Mbean bean) { 
        String sqlStart = "CREATE TABLE " + getTableName(bean.getClassName()) + " (" ; 
        return bean.getAttributes().stream() 
         .map(attribute -> mapToColumn(attribute)) 
         .collect(Collectors.joining(", ", sqlStart, ")"); // what about primary key? 
    } 
    
    private String mapToColumn(Attribute a) { 
        return getColumnName(a.getName()) + " " + getType(/*it depends*/); 
    } 
    
  • +0

    ありがとうございました!私があなたの提案した方法で実装していない間、あなたのソリューションは私にアイデアを与えました。 Table with Rowsというオブジェクトを作成しました。このテーブルの列は{"ID"、 "MbeanID"、 "AttributeID"、 "Value"}でした。次に、このオブジェクトをgetCreateTable()に触発された方法でupdateというメソッドに渡しました。これは、既存のテーブルが存在しない場合に必要なSQLテーブルを作成したり、既存のテーブルを "insert"ステートメントで更新します。 – Ishnark

    関連する問題