目次へ

解答例 - 実習課題2 - 4.XML文書を作成する

(実習課題2)

DBよりあるテーブルのデータ一覧を取得し、XML文書にして表示するプログラムを作成しなさい。例えば、以下のようなテーブルがあったとします。

Table "customer"
Attribute | Type | Modifier
-----------+-----------------------+----------------------
c_num | character(4) | not null
c_name | character varying(40) | not null
address | character varying(20) | default 'Osaka city'
office | character(2) |


    この場合、生成されるXML文書は以下のようになります。

<customer>
    <data>
        <c_num>1001</c_num>
        <c_name>Imada Kouchi</c_name>
        <address>Osaka city</address>
        <office>10</office>
    </data>
    <data>
...
	</data>
</customer>
  • ルート要素の名前はテーブル名
  • 1行はdata要素で表す
  • 各カラムのデータの値は,カラム名の要素の内容として出力する
  • 使用するデータベース、テーブルは任意(Postgresql、Oracle)。

解答例

/**
 * DataBase2XML.java
 * 
 * TECHSCORE Java XML DOM XSLT 4章 実習課題2
 * 
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
package com.techscore.dom.chapter4.exercise2;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class DataBase2XML {
    private static final String TABLE_NAME = "customer";
    private static final String[] COLUMNS = {"c_num", "c_name", "address", "office"};

    public static void main(String[] args) {
        
        Document document = null;
        try {
            document = DocumentBuilderFactory.newInstance()
                    .newDocumentBuilder()
                    .getDOMImplementation()
                    .createDocument("", TABLE_NAME, null);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
        Element root = document.getDocumentElement();

        try {
            Class.forName("org.postgresql.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.exit(1);
        }

        Connection connection = null;
        try {
            connection = DriverManager.getConnection("jdbc:postgresql:Training",
                                                     "postgres",
                                                     "");
        } catch (SQLException e) {
            e.printStackTrace();
            System.exit(1);
        }
        
        StringBuffer sql = new StringBuffer();
        sql.append("select " + COLUMNS[0]);
        for (int i = 1; i < COLUMNS.length; i++) {
            sql.append(",");
            sql.append(COLUMNS[i]);
        }
        sql.append(" from " + TABLE_NAME);

        try {
            Statement statement = connection.createStatement();
            ResultSet result = statement.executeQuery(sql.toString());
            while (result.next()) {
                Element data = document.createElement("data");
                for (int i = 0; i < COLUMNS.length; i++) {
                    Element element = document.createElement(COLUMNS[i]);
                    element.appendChild(document.createTextNode(result.getString(i + 1)));
                    data.appendChild(element);
                }
                root.appendChild(data);
            }
            result.close();
            statement.close();
        } catch (SQLException e) {
            e.printStackTrace();
            System.exit(1);
        } finally {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
                System.exit(1);
            }

        }

        try {
            Transformer transformer = TransformerFactory.newInstance()
                    .newTransformer();
            DOMSource source = new DOMSource(document);
            StreamResult result = new StreamResult(System.out);
            transformer.transform(source, result);
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
            return;
        } catch (TransformerException e) {
            e.printStackTrace();
            return;
        }
    }

}

※ この解答例では、データベースに PostgreSQL を使用し、 SQL 6章1節の実習課題の販売管理データベースの customer テーブルを利用しています。


↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp