私は Scriptella を初めて使用し、次の問題に完全に行き詰まりました。
アクセステーブルを用意しました。私が書いたプログラムを使用してテーブルスキーマを取得しています。出力ファイル ( tableschema.xml
) は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<table>
<column>ID</column>
<datatype>COUNTER</datatype>
<column>FirstName</column>
<datatype>VARCHAR</datatype>
<column>LastName</column>
<datatype>VARCHAR</datatype>
<column>Salary</column>
<datatype>CURRENCY</datatype>
<column>SSN</column>
<datatype>INTEGER</datatype>
</table>
次に、Scriptella を使用して、新しい PostgreSQL データベースを作成する必要があります (可能であれば。可能でない場合は、DB が既に作成されていると想定できます)。提供された XML ファイルを使用して新しいテーブルを作成し (必須)、すべてのデータをアクセス テーブルから PostgreSQL テーブルにコピーする必要があります。
アクセスからのデータ抽出を実装しました。XMLファイルからの情報抽出を実装しました。
Postgres で DB とテーブルを作成することに行き詰まりました。ScriptellaではうまくいかないCREATE DATABASE
ようです。CREATE TABLE
etl.xml
ファイルの私のラフドラフト:
<!DOCTYPE etl SYSTEM "http://scriptella.javaforge.com/dtd/etl.dtd">
<etl>
<connection id="db1" url="jdbc:odbc:TestDB" driver="scriptella.driver.odbc.Driver" user="Dzmitry" password="a"/>
<connection id="db2" url="jdbc:odbc:PostgreSQLconnector" driver="scriptella.driver.odbc.Driver" classpath="postgresql.jar" user="Dzmitry" password="a"/>
<connection id="script" driver="script"/>
<connection id="java" driver="scriptella.driver.janino.Driver"/>
<connection id="log" driver="text"/>
<!-- doesn't work
<script connection-id="db2" new-tx="true" if="create_databases">
CREATE DATABASE testDB;
</script>
-->
<query connection-id="db1">
SELECT * FROM GenInfo;
<script connection-id="script">
java.lang.System.out.println("Processing row number " + rownum + " ");
</script>
<script connection-id="log">
${FirstName}, ${LastName}, ${Salary}, ${SSN}
</script>
</query>
<query connection-id="java">
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import java.io.*;
import org.w3c.dom.Document;
import org.xml.sax.*;
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbFactory.newDocumentBuilder();
File file = new File("tableschema.xml");
Document document = docBuilder.parse(file);
XPathFactory xpFactory = XPathFactory.newInstance();
XPath xPath = xpFactory.newXPath();
int numberOfColumns = Integer.parseInt(xPath.evaluate("count(/table/column)", document));
for(int i = 1; i <= numberOfColumns; i++){ // does not take less than sign
System.out.print("Column name " + i + ": " + xPath.evaluate("/table/column[" + i + "]", document));
System.out.println("\tData type " + i + ": " + xPath.evaluate("/table/datatype[" + i + "]", document));
}
</query>
</etl>
誰でも私を助けることができますか?
よろしく、ドミトリー。