public final class JDataTable
extends java.lang.Object
implements java.io.Serializable
Tabellen können direkt dem DataSet zugewiesen werden (Root Table)
oder sie werden als Child Table oder Parent Table einer
anderen Tabelle zugeordnet.
Es ist nicht erlaubt, einer Parent Table Child Tables hinzuzufügen.
Das Geheimnis mit den Child und Parent Reference Names:
Bei ER-Modellen ist es erlaubt (wenn auch nicht übermäßig häufig),
daß ein und die selbe Tabelle mit einer anderen Tabelle mehrfach
verknüpft ist.
Beispiel: Die Tabelle Buchung hat die beiden Foreign Keys
KontoID und GegenkontoID die beide auf die übergeordnete Parent
Table "Konto" zeigen. In unserer Zugriffs-Definition sähe dann so aus:
<View ...>
<RootTable name="Buchung" ...>
<Column name="betrag"/>
<Column name="kontoID"/>
<Column name="gegenkontoID"/>
<Parent tablename="Konto" fk="kontoID">
<Column name="Kontobezeichnung"/>
</Parent>
<Parent tablename="Konto" fk="gegenkontoID">
<Column name="Kontobezeichnung"/>
</Parent>
Um jetzt im Dataset von der Tabelle Buchung aus zu den beiden
Konto-Bezeichnungen zu navigieren brauchts also mehr
Informationen als den Namen der Tabelle.Natürlich muß die Kombination aus Tabellennamen und Foreign Key auch eindeutig sein, aber diese Art der Notation ist doch gar zu umständlich, wenn sie nur in wenigen Fällen wirklich benötigt wird.
Statt dessen wird der Child- und der Table Referenz jeweils ein Name gegeben (wie das im ER-Modell auch üblich ist):
<View ...>
<RootTable name="Buchung" ...>
<Column name="betrag"/>
<Column name="kontoID"/>
<Column name="gegenkontoID"/>
<Parent tablename="Konto" fk="kontoID">
<Column name="Kontobezeichnung"/>
</Parent>
<Parent tablename="Konto" refname="Gegenkonto" fk="gegenkontoID">
<Column name="Kontobezeichnung"/>
</Parent>
Einfache Regel:Modifier and Type | Field and Description |
---|---|
static int |
CHILD_TABLE |
static java.lang.String |
META_DATABASE_NAME |
static int |
PARENT_TABLE |
static int |
ROOT_TABLE |
Constructor and Description |
---|
JDataTable()
Deprecated.
For serialization purpose only.
|
JDataTable(java.lang.String name)
Erzeugt eine Tabelle mit dem angegebenen Namen.
|
JDataTable(java.lang.String name,
int tableType)
Erzeugt eine Tabelle vom angegebenen Typ (ROOT, CHILD, PARENT).
|
JDataTable(java.lang.String name,
java.lang.String alias)
Erzeugt eine Tabelle mit dem angegebenen Namen
und einem abweichenden Alias-Namen.
|
JDataTable(java.lang.String name,
java.lang.String alias,
int tableType) |
Modifier and Type | Method and Description |
---|---|
Relation |
addChildTable(JDataTable tbl,
java.lang.String foreignKeys)
Fügt eine ChildTable hinzu.
|
Relation |
addChildTable(java.lang.String refName,
JDataTable tbl,
java.lang.String keys)
Fügt der Tabelle eine Child-Table hinzu
|
void |
addColumn(JDataColumn col)
Fügt der Tabelle eine weitere Spalte hinzu.
|
JDataColumn |
addColumn(java.lang.String name,
int datatype)
Fügt der Tabelle eine weitere Spalte hinzu.
|
void |
addParentTable(JDataTable tbl,
java.lang.String keys)
Fügt eine Parent Table hinzu.
|
JDataTable |
cloneTable(boolean deep)
Macht eine Kopie dieser DataTable.
|
JDataRow |
createNewRow()
Erzeugt eine neue leere Zeile.
|
static java.lang.String |
generateClazz(JDataTable tbl,
java.lang.String pack) |
java.lang.String |
getAlias()
Der Aliasname der Tabelle oder null, wenn kein Alias
|
java.lang.String |
getAliasOrName()
Liefert den Aliasname wenn vorhanden; ansonsten den Tabellennamen
|
java.lang.String |
getBeanClassName() |
java.lang.String |
getCatalog()
From Database MetaData TABLE_CAT
|
java.lang.String |
getChangeProtocol() |
Relation |
getChildRelation(java.lang.String refName) |
java.util.ArrayList<Relation> |
getChildRelations()
Liefert die Menge der abhängigen Relationen.
|
JDataTable |
getChildTable(java.lang.String _refname)
Liefert die Child Table mit dem angegebenen (Referenz-)Namen.
|
java.util.Iterator<JDataTable> |
getChildTables()
Liefert den Iterator für Child Tables.
|
java.lang.String |
getComment() |
java.lang.String |
getDatabaseName() |
JDataColumn |
getDataColumn(java.lang.String name)
Liefert eine DataColumns dieser Tabelle unter Angabe ihres Namens.
|
int |
getDataColumnCount()
Liefert die Anzahl der Spalten in dieser Tabelle
|
java.util.ArrayList<java.lang.String> |
getDataColumnNames()
Liefert die Namen der Columns
|
java.util.Iterator<JDataColumn> |
getDataColumns()
Liefert den Iterator von DataColumns.
|
electric.xml.Element |
getElement(boolean deep)
Liefert die MetaDaten zu dieser Tabelle als
XML-Element.
|
java.lang.String |
getFK(java.lang.String refName)
Deprecated.
Liefert die Foreign Key Columns für die angegebene Relation
|
java.lang.String |
getFullTablename()
Liefert den voll-qualifizierten Tabellennamen:
MySchema.MyTablename
|
java.lang.String |
getJoin()
Wenn !
|
JDataRow |
getMetaDataRow()
Liefert eine DataRow mit den Attributen eines JDataTable-Objektes
|
JDataRow |
getMetaDataRow(JDataRow row) |
JDataSet |
getMetaDataSet()
Liefert die Definition dieser Tabelle mit ihren Columns als DataSet;
Child und Parent Tables werden mitgeliefert.
|
static JDataTable |
getMetaDataTable()
Liefert eine DataTable mit den Attributen einer DataTable (Uff!).
|
JDataSet |
getMyDataset()
Liefert den Dataset, zu dem diese Tabelle gehört
oder null, wenn außerhalb eines Dataset.
|
JDataTable |
getMyParentTable()
Liefert die dieser Tabelle übergeordnete Tabelle im Dataset.
|
java.lang.String |
getParentFK()
Bei Parent Tables liefert dieses den Foreign Key, der von
der ChildTable auf Tabelle zeigt.
|
Relation |
getParentRelation(java.lang.String refName) |
java.util.ArrayList<Relation> |
getParentRelations()
Liefert die Menge der übergeordneten Relationen
|
JDataTable |
getParentTable(java.lang.String _refname)
Liefert die Parent Table mit dem angegebenen Name.
|
java.util.Iterator<JDataTable> |
getParentTables()
Liefert den Iterator für Parent Tables.
|
JDataColumn |
getPKColumn()
Liefert die Primary Key Column;
wirft eine Exception, wenn der Primary Key nicht
*genau* eine Spalte hat.
|
java.util.Iterator<JDataColumn> |
getPKColumns()
Liefert einen Iterator über die DataColumns, die den Primary Key bilden.
|
int |
getPKColumnsCount()
Liefert die Zahl der Columns die den Primary Key bilden.
|
java.lang.String |
getPKs()
Liefert die Feldnamen der Primary Key Columns als String mit Komma getrennt.
|
java.lang.String |
getRefname()
Liefert den Referenznamen dieser Tabelle.
|
java.lang.String |
getSchema()
From Database MetaData TABLE_SCHEM
|
java.lang.String |
getSelect()
Liefert "myTable AS myAlias"
oder nur "myTable"
|
java.lang.String |
getTablename()
Liefert den Tabellennamen.
|
int |
getTableType()
Liefert den TableType dieser Tabelle:
ROOT, CHILD, PARENT
|
java.lang.String |
getType()
From DatabaseMetaData TABLE_TYPE ('TABLE', 'VIEW', ...)
|
java.lang.String |
getVirtualChild() |
boolean |
hasChangeProtocol() |
boolean |
hasDataColumn(java.lang.String name)
Prüft, ob eine DataColumn unter dem angegebenen Namen existiert.
|
boolean |
isChildTable(JDataTable tbl)
Prüft, ob die angegebene Tabelle ein abhängige Tabelle ist.
|
boolean |
isChildTableObject(JDataTable tbl)
Prüft, ob die angegebene Tabelle ein abhängige Tabelle ist.
|
boolean |
isParentTable(JDataTable tbl)
Prüft, ob die angegebene Tabelle ein übergeordnete Tabelle ist.
|
boolean |
isParentTableObject(JDataTable tbl)
Prüft, ob die angegebene Tabelle ein übergeordnete Tabelle ist.
|
boolean |
isReadonly() |
boolean |
isSelfReference() |
boolean |
isTableObject(JDataTable tbl)
Prüft, ob die angegebene Tabelle mit dieser Tabelle in irgendeiner Form
verknüpft ist (entweder Parent oder Child, Grandparent,...).
|
boolean |
isTransient()
Liefert die Eigenschaft "transient".
|
boolean |
isVirtualChild()
Virtual Child Tables werden nicht in einer wirklichen Datenbank-Tabelle gespeichert, sondern
in *einem* Feld der Parent-Tabelle.
|
void |
setBeanClassName(java.lang.String beanClassName) |
void |
setCatalog(java.lang.String catalog) |
void |
setChangeProtocol(java.lang.String s)
Änderungsprotokoll für diese Root-Tabelle definieren
Das muß die Definition eines Views in PLConfig.xml sein.
|
void |
setComment(java.lang.String comment) |
void |
setDatabaseName(java.lang.String databaseName)
Da TABLE_SCHEM nicht zuverlässig funktioniert,
wird hier der Name der Datenbank eingetragen.
|
void |
setJoin(java.lang.String s)
Die Spalten dieser Parent Table werden als [s] JOIN mit
eingelesen.
|
void |
setReadonly(boolean readonly)
Die Daten dieser Tabelle werden nur gelesen, aber nie
in die Datenbank zurückgeschrieben.
|
void |
setRefname(java.lang.String string) |
void |
setSchema(java.lang.String schema)
Set Database Schema
|
void |
setSelfReference(boolean self)
Selbst-Referenzierende Tabelle
|
void |
setTablename(java.lang.String s)
Deprecated.
|
void |
setTransient(boolean b)
Definiert diese Tabelle als "transient" wenn 'true',
d.h. sie wird vom Persistenz-Layer nie verwendet
also weder aus der Datenbank gelesen, noch in sie
geschrieben.
|
void |
setType(java.lang.String type)
Set Table Type.
|
void |
setVirtualChild(java.lang.String virtualChild) |
java.lang.String |
toString()
Liefert die DataTable als XML-Element
|
public static final int ROOT_TABLE
public static final int CHILD_TABLE
public static final int PARENT_TABLE
public static final java.lang.String META_DATABASE_NAME
public JDataTable()
public JDataTable(java.lang.String name)
public JDataTable(java.lang.String name, int tableType)
name
- tableType
- public JDataTable(java.lang.String name, java.lang.String alias)
public JDataTable(java.lang.String name, java.lang.String alias, int tableType)
public java.lang.String getChangeProtocol()
public boolean hasChangeProtocol()
public void setChangeProtocol(java.lang.String s)
s
- public void setTablename(java.lang.String s)
s
- public JDataTable cloneTable(boolean deep)
deep
- wenn true, dann auch Child- und Parent Tables mit kopieren.JDataRow.cloneRow(JDataTable)
public electric.xml.Element getElement(boolean deep)
Dieses Element kann wieder als Constructor verwendet werden.
deep
- wenn 'true', werden auch Child und Parent Tables
mit verarbeitet.public JDataSet getMetaDataSet()
public JDataColumn addColumn(java.lang.String name, int datatype)
Achtung:
Ggf. im DataSet bereits vorhandene DataRows bleiben
unberücksichtigt!
public void addColumn(JDataColumn col)
Achtung:
Ggf. im DataSet bereits vorhandene DataRows bleiben
unberücksichtigt!
public Relation addChildTable(java.lang.String refName, JDataTable tbl, java.lang.String keys)
refName
- tbl
- keys
- public Relation addChildTable(JDataTable tbl, java.lang.String foreignKeys)
Dieses ist bei Parent Tables nicht erlaubt. Child Tables sind abhängige Daten; also z.B. die Ansprechpartner einer Firma, die Buchungen auf einem Konto.
Die Table Reference muß eindeutig sein.
tbl
- foreignKeys
- der Foreign Key in der Child-Table der auf diese
Parent Table zeigt. Wenn der Foreign Key aus mehreren Feldern
besteht, dann mit Komma getrennt. Es wird eine Exception geworfen, wenn
die angegebenen Spalten in der Child Table nicht vorhanden sind.public java.util.ArrayList<Relation> getChildRelations()
public Relation getChildRelation(java.lang.String refName)
public java.util.ArrayList<Relation> getParentRelations()
public Relation getParentRelation(java.lang.String refName)
public void addParentTable(JDataTable tbl, java.lang.String keys)
Eine Parent Table ist eine übergeordnete Information; also z.B. die Funktion einer Person, der Artikelstamm zu einer Bestellung.
tbl
- die Parent Tablekeys
- der Foreign Key in dieser Table der auf die
Parent Table zeigt. Wenn der Foreign Key aus mehreren Feldern
besteht, dann mit Komma getrennt. Es wird eine Exception geworfen, wenn
die angegebenen Spalten in dieser Table nicht vorhanden sind.public JDataTable getChildTable(java.lang.String _refname)
Wirft eine IllegalState- oder ArgumentException, wenn keine Childs vorhanden, oder angegebenen Tabelle nicht als Child definiert ist.
refname
- Der Name der Referenz auf die Tabellepublic JDataTable getParentTable(java.lang.String _refname)
Wirft eine IllegalState- oder ArgumentException, wenn keine Parents vorhanden, oder angegebenen Tabelle nicht als Parent definiert ist.
refname
- Der Name der Referenz auf die Tabellepublic JDataRow createNewRow()
Diese DataRow hat die Eigenschaft 'inserted'. Die Spalten werden mit den default-Werten gefüllt.
Anschließend muss diese Zeile an geeigneter Stelle angefügt werden:
public JDataColumn getDataColumn(java.lang.String name)
Wirft eine Exception, wenn Column fehlt.
Funktioniert hier auch,
wenn dem Column.Namen der Name dieser Tabelle mit einem "." vorangestellt wird.
"MyTable.MyColumn"
name
- public boolean hasDataColumn(java.lang.String name)
name
- public java.lang.String getAlias()
public java.lang.String getTablename()
public java.lang.String getFullTablename()
public java.lang.String getAliasOrName()
public java.lang.String getSelect()
public java.lang.String getSchema()
public void setSchema(java.lang.String schema)
schema
- public java.lang.String getType()
public void setType(java.lang.String type)
type
- public java.util.Iterator<JDataTable> getChildTables()
Wenn keine ChildTables vorhanden, wird ein leerer Iterator geliefert.
public boolean isChildTable(JDataTable tbl)
tbl
- public boolean isChildTableObject(JDataTable tbl)
tbl
- public boolean isTableObject(JDataTable tbl)
tbl
- public boolean isParentTable(JDataTable tbl)
tbl
- public boolean isParentTableObject(JDataTable tbl)
tbl
- public java.util.Iterator<JDataTable> getParentTables()
Es wird ein leerer Iterator geliefert, wenn keine ParentTables vorhanden.
public int getTableType()
public java.util.ArrayList<java.lang.String> getDataColumnNames()
public java.util.Iterator<JDataColumn> getDataColumns()
public int getDataColumnCount()
public JDataColumn getPKColumn()
public java.util.Iterator<JDataColumn> getPKColumns()
Wenn kein PK definiert, wird ein leerer Iterator geliefert.
public java.lang.String getPKs()
public int getPKColumnsCount()
public java.lang.String getFK(java.lang.String refName)
public java.lang.String getParentFK()
TODO : Diese Methode liefert falsche Ergebnisse, wenn ein Tabellen-Objekt mehrfach als Parent-Table eingesetzt wird.
public java.lang.String getJoin()
public void setJoin(java.lang.String s)
s
- public java.lang.String getRefname()
Wenn keine Referenz angegeben wird der Tabellenname geliefert. Siehe Attribut 'refname'.
public void setRefname(java.lang.String string)
string
- public static JDataTable getMetaDataTable()
public JDataRow getMetaDataRow()
public java.lang.String getDatabaseName()
public void setDatabaseName(java.lang.String databaseName)
databaseName
- The databaseName to set.public boolean isSelfReference()
public void setSelfReference(boolean self)
- public java.lang.String getCatalog()
public void setCatalog(java.lang.String catalog)
catalog
- The TABLE_CAT to set.public boolean isReadonly()
public void setReadonly(boolean readonly)
readonly
- The readonly to set.public void setTransient(boolean b)
Alle Spalten einer transiente Tabelle sind gleichfalls transient.
b
- public boolean isTransient()
public java.lang.String getComment()
public void setComment(java.lang.String comment)
comment
- The comment to set.public java.lang.String toString()
toString
in class java.lang.Object
public static java.lang.String generateClazz(JDataTable tbl, java.lang.String pack)
public java.lang.String getBeanClassName()
public void setBeanClassName(java.lang.String beanClassName)
public boolean isVirtualChild()
Dem Dataset ist nicht anzusehen, ob die Child-Tabelle in der Datenbank wirklich existiert oder nicht.
public void setVirtualChild(java.lang.String virtualChild)
virtualChild
- The virtualChild to set.public java.lang.String getVirtualChild()
public JDataSet getMyDataset()
public JDataTable getMyParentTable()
getMyDataset()