0
大きな(-ish)テーブルをXMLに変換しようとしています。その目的のために、どのようにMkyong does hereに基づいてDOMパーサを使用しています。大きなSQLiteテーブルをXMLに変換する
これは小さなテーブルでうまく動作しますが、7つの列と約350万行のテーブルに問題があります。それだけで永遠にかかる。より良い方法を提案したり、コードを改善できる箇所を指摘してください。
Javaおよび/またはSQLite以外は使用できません。たぶん私は適切なキーワードで検索していないが、Googleはこれまでのところ何か良いものを出せなかった。
public class Export {
public static void export() {
String select = "Select * FROM individuen ORDER BY ID";
DBController dbc = DBController.getInstance();
dbc.initDBConnection();
try {
Statement stmt = DBController.connection.createStatement();
ResultSet rs = stmt.executeQuery(select);
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
// root elements
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("individuen");
doc.appendChild(rootElement);
while (rs.next()) {
Element person = doc.createElement("Person");
rootElement.appendChild(person);
// set attribute to person element
Attr attr = doc.createAttribute("id");
attr.setValue(Integer.toString(rs.getInt(1)));
person.setAttributeNode(attr);
Element geschlecht = doc.createElement("Geschlecht");
geschlecht.appendChild(doc.createTextNode(Integer.toString(rs.getInt(2))));
person.appendChild(geschlecht);
[...]
}
System.out.println("oooooooooooout");
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("file.xml"));
// Output to console for testing
// StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
System.out.println("Als XML exportiert!");
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
実際には「書き込み専用」の完全なXML DOMを気にするのはなぜでしょうか。 XMLライブラリを忘れて、XMLを直接String操作で書き出します。あなたのコードはもう少し長くなりますが、書き出すだけで対話しない大量のデータをメモリに取り込んでいます。 – stdunbar
多くのデータを扱っているので、DOMを使用しないように**お勧めします。それだけで十分なエフェクトではありません。 SAX/StAXを直接使用するか、InputStream(またはNIOが必要な場合はチャネル)を使用してXMLファイルを直接ビルドします。また、すべての作品を分割してxmlのセグメントを同時に書くこともできます(Fork/Joinフレームワークを試してみてください)。とにかく、xmlは大きなデータベースを格納するのに適していません。そのサイズ、管理能力、処理速度は、あなたの世界を本当に止めます。 – glee8e