java - 读取 XML 并创建多个表

标签 java sql xml jmx

我有一个 XML 输入文件,如下所示:

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

我创建了一个名为“Mbeans”的 POJO,如下所示:

@XmlRootElement(name = "mbean")
@XmlAccessorType(XmlAccessType.FIELD)
public class Mbean
{
    @XmlElement(name = "attribute")
    private List<Attribute> attributes = null;

    @XmlAttribute(name = "className")
    private String className;

    public String getClassName() {
        return className;
    }
}

我可以成功地将 XML 文件解码到此 POJO 中,并且我的应用程序可以根据需要使用此对象。这个输入文件告诉我需要从我拥有的特定 MBean 中获取的信息。有没有办法基于 XML 文件创建多个表,这样当我提取所述信息时,我可以将该信息存储到所述表结构中,然后使用 JDBC 在我的 H2 数据库上创建 SQL 表?

例如,我想创建如下所示的表格:

+------------------------+
|        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|
+------+--------+------------+-------+

最佳答案

我首先会做:

  • className映射到表名的方法public String getTableName(String className)
  • attributeName 映射到 clomun 名称的方法 public String getColumnName(String attributeName)
  • formatTypeformatter 映射到数据库类型的方法 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*/);
}

关于java - 读取 XML 并创建多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41797948/

相关文章:

java - 尽管可见,启用为 true,但子 JComponent 不会获得焦点

java - 带有 JRE 7 的 Eclipse Juno 会导致启动问题

sql - 有 GUID 列表时如何从表中选择行?

sql - 通过 SQL 从 Oracle 中的 clob 中提取 XML 子标签

java - 如何在运行时将组件添加到 JPanel

mysql - SQL - 在很多情况下 updated_date 为 null 时如何按 item_id 和 last_updated 日期查询?

sql - 添加非聚集索引会锁定我的表吗?

c# - 读取原始 XML 格式的 MSMQ 消息

xml - 如何使用 XMLFile 设置值?

java - 有没有办法在 JAXP 或 Xalan XSLT 范围内绑定(bind) Java 对象?