Entwurfsarchitektur für ein Werkzeug

Ich benötige ein Tool, mit dem Daten erfasst, in einer Excel-Datei gespeichert und SQL-Dateien für die Datenbankausführung generiert werden.

Um dies zu beheben, habe ich begonnen, ein Framework zu entwerfen und zu entwickeln, das XML-Dateien liest und den Swing-Bildschirm für die Datenerfassung rendert und in Excel speichert. Jetzt habe ich ein Stadium erreicht, in dem ich Daten in Excel habe. Jetzt kann ich den Ansatz nicht weiter bestimmen. Ich habe einen Ansatz im Auge, um die Daten aus Excel-Tabellen zu erhalten und SQL-Dateien zu erstellen, bin jedoch nicht sicher, wie dieser Ansatz aussehen soll.

Der Ansatz, über den ich nachdenke, besteht darin, weitere XML-Dateien zu entwickeln (eine für jedes Schema in db), die die Replik der benötigten Datenbanktabellenstruktur enthalten. In der GUI-XML würde ich ein neues Tag namens "databaseMapping" bereitstellen, das SCHEMA_NAME; TABLE_NAME; COLUMN_NAME enthält. Wenn ein Benutzer danach fragt, SQL-Anweisungen für eine bestimmte Datei zu generieren, lese ich die XML-Bildschirmanweisungen für dieses Excel, finde die Datenbankzuordnungen heraus und erstelle die SQL-Anweisungen. Aber ich sehe Herausforderungen in diesem Ansatz:

1) In einem Excel würden Spalten mehr als einer Tabelle entsprechen und Spalten könnten über verschiedene Arbeitsblätter verteilt sein, so dass das Lesen und Erstellen des SQL eine ressourcenintensive Aktivität wäre.

2) Das Lesen von Excel selbst ist so langsam (mithilfe von POI), dass die Leistung der App mit wachsendem Excel abnimmt. Ich glaube, POI unterstützt nicht das Kopieren ganzer Spalten aus verschiedenen Arbeitsblättern und das Erstellen einer neuen Arbeitsmappe oder eines neuen Arbeitsblatts. Wenn das möglich wäre, wäre es immer noch überschaubar. Es scheint mir nicht ganz richtig, jede Zeile und dann jede Zelle zu lesen, um das neue temporäre Arbeitsblatt in der DB-Tabellenstruktur zu erstellen, um SQL zu generieren.

GUI XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DataDetails>
    <Page pageId="1">
        <Column columnName="Branch ID">
            <dataType>String</dataType>
            <maxLength>3</maxLength>
            <isMandatory>true</isMandatory>
            <isUnique>true</isUnique>
            <defaultValue></defaultValue>
            <forbiddenCharacters></forbiddenCharacters>
            <limitedChoices></limitedChoices>
            <databaseMapping></databaseMapping>
        </Column>

        <Column columnName="Branch Name">
            <dataType>String</dataType>
            <maxLength>10</maxLength>
            <isMandatory>false</isMandatory>
            <isUnique>true</isUnique>
            <defaultValue></defaultValue>
            <forbiddenCharacters></forbiddenCharacters>
            <limitedChoices></limitedChoices>
            <databaseMapping></databaseMapping>
        </Column>

        <Column columnName="Branch Type">
            <dataType>String</dataType>
            <maxLength>15</maxLength>
            <isMandatory>false</isMandatory>
            <isUnique>true</isUnique>
            <defaultValue></defaultValue>
            <forbiddenCharacters></forbiddenCharacters>
            <limitedChoices></limitedChoices>
            <databaseMapping></databaseMapping>
        </Column>

        <Column columnName="Location">
            <dataType>String</dataType>
            <maxLength>3</maxLength>
            <isMandatory>false</isMandatory>
            <isUnique>true</isUnique>
            <defaultValue></defaultValue>
            <forbiddenCharacters></forbiddenCharacters>
            <limitedChoices></limitedChoices>
            <databaseMapping></databaseMapping>
        </Column>

        <Column columnName="Pincode">
            <dataType>String</dataType>
            <maxLength>3</maxLength>
            <isMandatory>false</isMandatory>
            <isUnique>true</isUnique>
            <defaultValue></defaultValue>
            <forbiddenCharacters></forbiddenCharacters>
            <limitedChoices></limitedChoices>
            <databaseMapping></databaseMapping>
        </Column>
    </Page>
    <Page pageId="2">
        <Column columnName="Business Line">
            <dataType>String</dataType>
            <maxLength>3</maxLength>
            <isMandatory>false</isMandatory>
            <isUnique>true</isUnique>
            <defaultValue></defaultValue>
            <forbiddenCharacters></forbiddenCharacters>
            <limitedChoices></limitedChoices>
            <databaseMapping></databaseMapping>
        </Column>

        <Column columnName="Branch Currency">
            <dataType>Date</dataType>
            <maxLength></maxLength>
            <isMandatory>false</isMandatory>
            <isUnique></isUnique>
            <defaultValue></defaultValue>
            <forbiddenCharacters></forbiddenCharacters>
            <limitedChoices></limitedChoices>
            <databaseMapping></databaseMapping>
        </Column>

        <Column columnName="Action">
            <dataType>String</dataType>
            <maxLength>10</maxLength>
            <isMandatory>false</isMandatory>
            <isUnique>true</isUnique>
            <defaultValue></defaultValue>
            <forbiddenCharacters></forbiddenCharacters>
            <limitedChoices>ComboBoxTest_Single.xlsx - ACTION;ACTION </limitedChoices>
            <headerName>CODE_SUB_ID</headerName>
            <databaseMapping></databaseMapping>
        </Column>
    </Page>
</DataDetails>

DB XML (vorgeschlagen)

<?xml version="1.0" encoding="UTF-8"?>
<table name="tablename">
    <column name="column1">
        <dataType>varchar</dataType>
        <length>20</length>
        <nullAllowed>Y</nullAllowed>
        <defaultValue></defaultValue>
        <isPrimaryKey>Y</isPrimaryKey>
    </column>

    <column name="column2">
        <dataType>timestamp</dataType>
        <length></length>
        <nullAllowed>Y</nullAllowed>
        <defaultValue></defaultValue>
    </column>

    <column name="column3">
        <dataType>varchar</dataType>
        <length>20</length>
        <nullAllowed>Y</nullAllowed>
        <defaultValue></defaultValue>
    </column>

    <column name="column4">
        <dataType>decimal</dataType>
        <lengthIntegerPart>24</lengthIntegerPart>
        <lengthFractionalPart>6</lengthFractionalPart>
        <nullAllowed>Y</nullAllowed>
        <defaultValue></defaultValue>
    </column>

    <column name="column5">
        <dataType>integer</dataType>
        <length>1</length>
        <nullAllowed>Y</nullAllowed>
        <defaultValue></defaultValue>
    </column>

    <column name="column6">
        <dataType>varchar2</dataType>
        <length>30</length>
        <nullAllowed>N</nullAllowed>
        <defaultValue></defaultValue>
    </column>

    <column name="column7">
        <dataType>date</dataType>
        <length></length>
        <nullAllowed>Y</nullAllowed>
        <defaultValue></defaultValue>
    </column>

    <column name="column8">
        <dataType>decimal</dataType>
        <lengthIntegerPart>24</lengthIntegerPart>
        <lengthFractionalPart>6</lengthFractionalPart>
        <nullAllowed>N</nullAllowed>
        <defaultValue></defaultValue>
    </column>
</table>

Vielen Dank !!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage