解答例 - 実習課題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 テーブルを利用しています。

![Webアプリ開発エンジニアのための技術情報サイト[テックスコア]](/common/img/description.gif) 
 







