Virtuelle Tabellen (Databinding)

Anfang  Zurück  Vor

Letzte Änderung 03.01.2014

 

Was sind Virtuelle Tabellen?

 

Virtuelle Tabellen (VTs) sind ein Architekturkonzept, welches das XDEV Application Framework für die einfache Verbindung von Datenbanken (ggf. auch anderen Datenquellen wie Dateien, Webservices, etc.) und grafischer Benutzeroberfläche zur Verfügung stellt. Virtuellen Tabellen sind eine Datenbankabstraktionsschicht auf dem Client, welche als Zwischenschicht die Datenschicht und Präsentationsschicht miteinander verbindet. Eine Virtuelle Tabelle ist praktisch das Databinding zwischen Datenbanktabellen und den Controls auf der Benutzeroberfläche. Virtuelle Tabellen automatisieren die Verarbeitung von Datenbank-Abfrageergebnissen und die anschließende Ausgabe der Daten auf der Oberfläche vollständig und vereinfachen damit die GUI-Programmierung mit Java Swing erheblich.

 

Die Virtuelle Tabelle übernimmt 6 wichtige Hauptaufgaben:

Datenpuffer für alle Datenbank-Abfrageergebnisse - Eine Virtuelle Tabelle ist einfach ausgedrückt eine leere Kopie einer Datenbanktabelle, die zur Laufzeit im Hauptspeicher des Clients erzeugt wird. Für jede Datenbanktabelle die Sie abfragen möchten, benötigen Sie also eine Virtuelle Tabelle. In der Praxis liegt oft die komplette Datenbank in Form von Virtuellen Tabellen vor. Deshalb werden Virtuelle Tabellen als Datenbankabstraktionsschicht bezeichnet. Bis zur ersten Datenbankabfrage ist jede Virtuelle Tabelle völlig leer und belegt damit keinen Speicherplatz für Daten. Lediglich die Struktur der Virtuellen Tabelle wird in Form von Metadaten gespeichert. Dazu gehören Tabellen- und Spaltennamen, deren Datentypen sowie eine Reihe wichtiger Zusatzdaten, u.a. Primärschlüssel, bestehende Relationen, Spaltenbeschriftungen, Formatvorgaben für Zahlen- und Datumswerte etc. Der Speicherbedarf dafür ist jedoch unbedeutend gering. Erst bei einer Datenbankabfrage wird die Virtuelle Tabelle mit Daten aufgefüllt. Die eingehende Datenmenge hängt dabei allein von der vorausgehenden Datenbankabfrage ab, die entweder vom Entwickler selber in SQL, Java oder mit Hilfe des Query-Assistenten formuliert oder vom XDEV Application Framework automatisch erzeugt wird. Mit der Methode clear( ) können die Daten der Virtuellen Tabelle zu jeder Zeit gelöscht werden. VT-Instanzen werden von der Java VM automatisch gelöscht, sobald sie nicht mehr benötigt werden.

Automatisierte Standard-Abfragen - Die Virtuelle Tabelle stellt Standardabfragen für die automatisierte Datenausgabe mit Tables, Trees, List- und ComboBoxen zur Verfügung, sodass Sie sich darum nicht kümmern müssen. Auch Abfragen über mehrere Datenbanktabellen sind dabei kein Problem. Sämtliche Joins dafür werden automatisch erzeugt.

Lazy-Loading - Die Virtuelle Tabelle fordert von der Datenbank automatisch immer nur so viele Datensätze an, wie sich in der jeweiligen GUI-Komponente anzeigen lassen. Die restlichen Daten werden bei Bedarf nachgeladen (Lazy-Loading). Die Navigation durch das Abfrageergebnis erfolgt bei Listen mit Hilfe der vertikalen Scrollbar oder mit der speziell dafür vorgesehenen GUI-Komponente XdevPageNavigationBar, die ein seitenweises Blättern (Paging) ermöglicht. Um Lazy-Loading zu ermöglichen, wird das komplette Abfrageergebnis von der Datenbank intern als ScrollableResultset zwischengespeichert und bleibt so lange erhalten wie die Datenbank-Connection, die während des Scrollvorgang persistent bleibt. Mit Lazy-Loading wird der Speicherbedarf für des Abfrageergebnis minimiert und gleichzeitig die Performance optimiert.

Hinweis: Die interne Funktionsweise und Performance des ScrollableResultSet-Konzepts ist grundsätzlich die Datenbank verantwortlich, da das Konzept von den einzelnen Datenbanken z.T. völlig unterschiedlich umgesetzt wird und zudem vom JDBC-Treiber unterstützt werden muss. Einige Datenbanken unterstützen ein dynamisches ScrollableResultSet, bei dem das ScrollableResultSet bei relevanten Änderungen in der Datenbank automatisch aktualisiert wird, andere Datenbanken unterstützen dagegen lediglich ein statsiches ScrollableResultSet. Für Datenbanken, die das  ScrollableResultSet-Konzept nicht unterstützen, u.a. Oracle, wurde eine alternative Lösung eingeführt.

Datenquelle für die Benutzeroberfläche - Alle komplexen GUI-Komponenten erhalten ihr Model samt Daten zur Anzeige auf der Oberfläche von einer Virtuellen Tabelle. Dafür stellt die Virtuelle Tabelle für alle komplexen GUI-Komponenten passende GUI-Models, Renderer und Editoren zur Verfügung. Damit kann die Virtuelle Tabelle gemäß MVC-Architekturmuster (Model-View-Controller) im weiteren Sinne als Model bezeichnet werden, während die GUI-Komponenten die View und Controller-Einheit bilden.

Persistierung und Transaktionssicherheit - Sämtliche Datenänderungen, die auf der Oberfläche zum Beispiel in einem Formular oder in einer Tabelle vorgenommen werden, finden immer in der jeweiligen Virtuellen Tabelle statt, d.h. ausschließlich im Hauptspeicher des Clients. Mit Hilfe der Virtuellen Tabelle lassen sich sämtliche Änderungen nicht nur auf einfache Weise sondern zudem transaktionssicher in der Datenbank speichern. Dafür stellt die Virtuelle Tabelle die Methode synchronizeChangedRows( ) zur Verfügung.

Datensatz-Locking - Die Virtuelle Tabelle kümmert sich auch um konkurrierende Datenbankzugriffe. Editierte Datensätze werden automatisch gesperrt und damit gegen zeitgleiche Schreibzugriffe geschützt. Welches Sperrverfahren angewendet wird und wie der Sperrvorgang im Detail funktionieren soll, insbesondere Lebensdauer eines Locks, lässt sich individuell konfigurieren.

 

 

Databinding_Schaubild

 

 

Datenbanktabelle mit entsprechender Virtueller Tabelle:

 

DB: Modelle

 

VT: MODELLE


clip0357

 

 

clip0359

clip0358


 


Die Virtuelle Tabelle ist eine leere Kopie der Datenbanktabelle


 

 

Hinweis: Virtuelle Tabellen sind ein Konzept, das Datenbank- und GUI-Programmierung mit Swing enorm vereinfacht. XDEV 5 zwingt Sie jedoch nicht zum Einsatz Virtueller Tabellen. Wenn Sie bereits über einschlägige Programmiererfahrung mit Swing verfügen, können Sie an jeder beliebigen Stelle auch konventionelle Swing-Techniken einsetzen und diese mit dem Einsatz Virtueller Tabellen kombinieren oder aber auch vollständig auf Virtuelle Tabellen verzichten. Auch der Einsatz von JPA, Hibernate oder EclipseLink etc., ist mit oder der Verwendung Virtueller Tabellen problemlos möglich.

 

 

 

VT Syntax

 

Im Programmcode werden Virtuelle Tabellen mit ihrer Bezeichnung zusammen mit der statischen Variable VT angegeben, z.B. Fahrzeuge.VT. VT ist eine statische Variable der Klasse VirtualTable, die beim Anlegen einer Virtuellen Tabelle automatisch deklariert wird und auf die Instanz der Virtuellen Tabelle verweist.

 

Zur Laufzeit wird die Virtuelle Tabelle automatisch instanziert, sobald die Virtuelle Tabelle zum ersten Mal verwendet wird. Über die statische Variable VT ist dann der Zugriff auf die globale Instanz dieser Virtuellen Tabelle im gesamten Projekt möglich.

 

Der Zugriff auf die Methoden der Virtuellen Tabelle erfolgt im Code-Editor ebenfalls über die Variable VT.

 

clip0493

 

 

 

VT-Zeilen-Nummerierung via Index

 

Die Virtuelle Tabelle verwaltet alle Zeilen mit Hilfe eines Index. Der Index einer Virtuellen Tabelle ist eine laufende Nummer, die von der Virtuellen Tabelle automatisch vergeben wird und mit dem Wert 0 beginnt. Der Index ist immer lückenlos. Nach dem Löschen einer Zeile aus der Virtuellen Tabelle wird der Index aller nachfolgenden Zeilen automatisch um 1 reduziert, sodass die entstandene Lücke automatisch geschlossen wird. Der Index ist ein ausschließlich intern verwendeter Wert, der bei der Datenausgabe auf der Oberfläche nicht sichtbar ist.

 

Der Index einer Virtuellen Tabelle ist nicht zu verwechseln mit der ID von Datensätzen. Die ID eines Datensatzes wird von der Datenbank vergeben und beginnt i.d.R. mit dem Wert 1. Nach dem Löschen eines Datensatzes in einer Datenbanktabelle bleiben die IDs aller anderen Datensätze unverändert. Die ID eines gelöschten Datensatzes wird von der Datenbank niemals ein zweites Mal vergeben.

 

 

Unterschied Index - Datensatz ID:

 

 

Virtuelle Tabelle

Datenbank


Index / ID vergibt

Virtuelle Tabelle

Datenbank


Nummerierung

Immer lückenlos

I.d.R. lückenhaft


Datenzugriff via

Index

Datensatz-ID


Zugriff via

Get-Methoden

SQL


 

 

Index vor und nach dem Löschen von Zeilen:

 

clip0362

 

 

 

clip0359

clip0363

 

 

 

clip0359

clip0364


Ausgangszustand


3 Zeilen werden gelöscht


Nach dem Löschen ist der Index wieder lückenlos.


 

 

 

Datentyp-Mapping

 

Die Datentypen der verschiedenen Datenbanken unterscheiden sich z.T. erheblich von Java Datentypen sowie voneinander, insbesondere bei der Namensgebung und deren Wertebereiche. Deshalb werden die SQL Datentypen von JDBC abstrahiert und in entsprechende Java Datentypen umgewandelt. Darüber hinaus stellt XDEV 5 zusätzliche Erweiterungen für einige Java Datentypen zur Verfügung, um den Umgang mit bestimmten Datentypen zu vereinfachen. Von der Virtuellen Tabelle nicht angebotene JDBC Datentypen, z.B. ARRAY, DATA LINK, JAVA OBJECT etc., werden in entsprechend geeignete Xdev-Datentypen umgewandelt, z.B. XdevClob.

 

 

JDBC Datentypen

Java Datentypen

XDEV 5 Datentypen


TINYINT

Byte

 

Ganzzahlige Daten von 0 bis 255. Die Speichergröße beträgt 1 Byte.

SMALLINT

Short

 

Ganzzahlige Daten von -2^15 (-32.768) bis 2^15 - 1 (32.767). Die Speichergröße beträgt 2 Byte.

INTEGER

Integer

 

Ganzzahlige Daten von -2^31 (-2.147.483.648) bis 2^31 - 1 (2.147.483.647). Die Speichergröße beträgt 4 Byte. Das SQL-92-Synonym für INT.

BIGINT

Long

 

Ganzzahlige Daten von -2^63 (-9223372036854775808) bis 2^63-1 (9223372036854775807). Die Speichergröße beträgt 8 Byte.

REAL

Float

 

Gleitkommazahl mit 7 Nachkommastellen von ±1,4E−45 bis ±3,4E+38. Die Speichergröße beträgt 4 Bytes.

DOUBLE

Double

 

Gleitkommazahl doppelter Genauigkeit mit 15 Nachkommastellen von ±4,9E−324 … ±1,7E+308. Die Speichergröße beträgt 8 Byte.

FLOAT

Double

 

Gleitkommazahl mit 7 Nachkommastellen von ±1,4E−45 bis ±3,4E+38. Die Speichergröße beträgt 4 Bytes.

NUMERIC

Double

 

Double mit definierten Vor- und Nachkommastellen (genau).

DECIMAL

Double

 

Double mit definierten Vor- und Nachkommastellen (vage).

BOOLEAN

Boolean

 

Boolescher Wahrheitswert true / false.

CHAR

String

 

Zeichendatentypen für Daten mit fester Länge. Geeignet, wenn die Werte alle ungefähr dieselbe Länge haben werden.

VARCHAR

String

 

Zeichendatentypen für Daten mit kleiner variabler Länge. Geeignet, wenn die Werte voraussichtlich sehr unterschiedliche Längen haben werden.

LONGVARCHAR

String

 

Zeichendatentypen für Daten mit großer variabler Länge. Geeignet, wenn die Werte voraussichtlich sehr unterschiedliche Längen haben werden.

CLOB

 

XdevClob

Character Large Object. Große Datenmenge in Zeichen Form. Erweitert den Java-Typ sowie bessere Integration in die XAPI, insbesondere i.V.m. Virtuellen Tabellen.

BINARY

Byte

 

Binäre Datentypen mit fester Länge.

VARBINARY

Byte

 

Binäre Datentypen mit kleiner variabler Länge.

LONGVARBINARY

Byte

 

Binäre Datentypen mit großer variabler Länge.

BLOB

 

XdevBlob

Binary Large Object. Daten in binärer Form, z.B. Bilddateien. Erweitert den Java-Typ sowie bessere Integration in die XAPI, insbesondere i.V.m. Virtuellen Tabellen.

DATE

 

XdevDate

Vereinheitlicht die Java Date- und Kalenderklassen.

TIME

 

XdevDate

Vereinheitlicht die Java Date- und Kalenderklassen.

TIMESTAMP

 

XdevDate

Vereinheitlicht die Java Date- und Kalenderklassen.