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

