|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectde.jsystems.framework.common.saver.DataBaseSaver
Speichert die Items aus einem Model in einer Datenbank. Dazu muessen die
Items allerdings von ihren Attributen her auch zur Datenbanktabelle
passen. Im Konstruktor wird der Tabellenname sowie ein Connection-Objekt
zur Datenbank uebergeben. Die Connection muss schon initialisiert sein
und eine Verbindung zur Datenbank haben. Die entsprechenden INSERT,
DELETE und SELECT-Satements werden dann auf Grund der Metadaten aus der
Datenbank generiert. Falls das nicht gewuenscht ist, koennen auch schon
entsprechend vorbereitete Statements als String uebergeben werden. Hier
muessen dann aber entsprechende Platzhalter fuer die INSERT-Anweisung
im String enthalten sein. Bei der DELETE-Anweisung ist kein Parameter notwendig,
da bei der Standardimplementierung immer erst die ganze Tabelle geloescht
wird. Bei einer SELECT-Anweisung
ist darauf zu achten, das alle Attribute der Tabelle, die auch in das Item sollen,
namentlich aufgefuehrt werden. Das kann auch ueber ALIS-Namen im Statement
gesschehen. Wichtig ist dabei allerdings, das der Spaltenname oder der ALIAS-Name
fuer die ID nicht 'itemID' heissen darf, sondern 'ID'. Gross-/Kleinschreibung
fuer die Attribute wird nicht unterschieden, deshalb darf auch die Datenbank
hier keine Unterscheidung treffen. Diese Verbindung zwischen Datenbanktabelle und Item
ist fuer das automatische Fuellen des Items notwendig, damit die Spalten den Attributen
zugeordnet werden koennen. Beim auslesen der Tabelle und erzeugen der notwendigen
Items werden die Eigenschaften fuer die Attribute automatisch mit registriert.
Hierzu werden die Metadaten der Tabelle ausgewertet, um festzustellen, ob ein
Feld NOT NULL ist oder nicht. NOT NULL-Felder aus der Datenbank bekommen
dann die Eigenschaft Item.MUSSFELD
.
Alle anderen Felder bekommen beim lesen aus der Datenbank die Eigenschaft
Item.STANDARD
. Falls andere
Eigenschaften fuer die Attribute der Items gewuenscht werden muss
entweder die Methode load()
ueberschrieben werden oder eben eine
eigene Implementierung des Interfaces Saver
.
Bei dieser Implementierung ist zu beachten, das immer die ganze
Datenbanktabelle eingelesen und n einem Model gespeichert wird.
Wenn die Tabelle sehr groß ist kann das zu Performanceproblemen
fuehren oder aber die Java-VM stürzt ab mit einem OutOfMemoryError
.
Bei sehr großen Datenmengen ist also die load()
-Methode entsprechend
zu ueberschreiben.
Beim Speichern eines Models in der Datenbank wird als erstes immer die zugehoerige Tabelle geleert! Das liegt daran, das mi Model vielleicht Items geloescht wurden. Damit sich das auch in der Datenbank wiederspiegelt wird sie hier einfach erst geloescht und dann alle Items aus demModel wieder in der Tabelle eingefuegt. Das erfordert weniger Statements auf die Datenbank als wenn fuer jeden vorhandenen Eintrag in der Datenbank erst geprueft wueder, ob es das zugehoerige Item auch noch im Model gibt. Falls ein anderes verhalten gewuenscht wird, wird hier auf die J2EE-Spezifikation verwiesen. Hier erlauben die EntityBeans ein anderes verhalten, da Aenderungen an einem Bean sofort in der Datenbank landen; somit natuerlich auch das loeschen eines solchen.
Field Summary | |
protected Connection |
connection
Die Verbindung zur Datenbank. |
protected String |
deleteStatement
Das DELETE-Statement zum loeschen der Tabelle. |
protected File |
file
|
protected String |
filename
|
protected String |
insertStatement
Das INSERT-Statement zum einfuegen eines neuen Items in die Datenbank. |
protected IBusinessModelSave |
model
Das Model in dem die zu ladenden oder zu speichernden Items abgelegt werden. |
protected String |
pathname
|
protected String |
selectStatement
Das SELECT-Statement zum lesen der Item-Daten. |
protected String |
tableName
Der Name der Tabelle in der Datenbank, aus der die Items gelesen bzw. gespeichert werden. |
Constructor Summary | |
DataBaseSaver(String tableName,
Connection connection)
Erzeugt einen neuen DataBaseSaver. |
|
DataBaseSaver(String tableName,
Connection connection,
String selectStatement,
String insertStatement,
String deleteStatement)
Erzeugt einen neuen DataBaseSaver. |
Method Summary | |
void |
load()
Laedt alle Daten aus der gesetzten Tabelle und speichert sie im gesetzten Model. |
void |
save()
Speichert alle Items aus dem gesetzten Model in der Datenbank. |
void |
setDeleteStatement(String deleteStatement)
Das Statement zum loeschen der Tabelle. |
void |
setFile(File file)
Bei Aufruf dieser Methode passiert nichts, da der DataBaseSaver nicht mit Files arbeitet. |
void |
setFileName(String fileName)
Bei Aufruf dieser Methode passiert nichts, da der DataBaseSaver nicht mit Files arbeitet. |
void |
setInsertStatement(String insertStatement)
Setzt das INSERT-Statement, mit dem ein Item in der Tabelle gespeichert werden kann. |
void |
setModel(IBusinessModelSave model)
Setzt das Model mit dem der Saver arbeiten soll. |
void |
setPathName(String pathname)
Bei Aufruf dieser Methode passiert nichts, da der DataBaseSaver nicht mit Files arbeitet. |
void |
setSelectStatement(String selectStatement)
Setzt das SELECT-Statement, mit dem die komplette Tabelle gelesen werden kann. |
void |
setTableName(String tableName)
Setzt den Namen der Tabelle, in der gespeichert bzw. aus der gelesen werden soll. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
protected File file
protected String filename
protected String pathname
protected IBusinessModelSave model
protected Connection connection
protected String tableName
protected String selectStatement
protected String insertStatement
protected String deleteStatement
Constructor Detail |
public DataBaseSaver(String tableName, Connection connection)
tableName
- Der Tabellenname in dem die Items des Models
gespeichert bzw. aus der sie geladen werden
sollen.connection
- Die Verbindung zur Datenbank.public DataBaseSaver(String tableName, Connection connection, String selectStatement, String insertStatement, String deleteStatement)
SQLException
kommt.
Diese Bedingungen werden nicht vorab durch ein parsen des
uebergebenen Statements geprueft. Es wird eine Exception ausgeloest,
wenn diese Bedingungen nicht erfuellt sind.
Keiner der Parameter darf NULL sein und die Strings duerfen auch
nicht leer sein. Wenn odch, so wird eine IllegalArgumentException
ausgeloest.
tableName
- Der Tabellenname in dem die Items des Models
gespeichert bzw. aus der sie geladen werden
sollen.connection
- Die Verbindung zur Datenbank.selectStatement
- Ein SQL-Statement um die gewuenschten Spalten
zum fuellen des Items zu selektieren.insertStatement
- Ein SQL-Statement um die Attribute eines
Items in der Datenbank zu speichern.deleteStatement
- Ein SQL-Statement um den Inhalt der Tabelle
zu loeschen.Method Detail |
public void setTableName(String tableName)
tableName
- Der Name der Tabelle in der die Items gespeichert
bzw. aus der sie geladen werden.public void setSelectStatement(String selectStatement)
selectStatement
- Das SELECT-Statement zum laden der kompletten Tabelle.public void setInsertStatement(String insertStatement)
IllegalArgumentException
ausgeloest.
insertStatement
- Das Statement zum speichern eines Items in der Datenbank.public void setDeleteStatement(String deleteStatement)
save()
, da vor dem Speichern einfach
die komplette Tabelle geleert wird und dann das komplette Model wieder
eingefuegt.
Das Statement darf weder NULL noch leer sein. Andernfalls wird eine
IllegalArgumentException
ausgeloest.
deleteStatement
- Das Statement zum loeschen der Tabelle.public void save() throws SQLException
SQLException
ausgeloest.
save
in interface Saver
SQLException
- wenn beim speichern ein Fehler auftritt.public void load() throws SQLException
SQLException
ausgeloest.
load
in interface Saver
SQLException
- wenn beim speichern ein Fehler auftritt.public void setFile(File file)
setFile
in interface Saver
file
- Ein File-Objekt, das hier nicht beruecksichtigt wird.public void setFileName(String fileName)
setFileName
in interface Saver
fileName
- Ein Filename der hier nicht weiter beruecksichtigt wird.public void setPathName(String pathname)
setPathName
in interface Saver
pathname
- Eine Pfadangabe die hier nicht weiter beruecksichtigt wird.public void setModel(IBusinessModelSave model)
load()
und save()
keine
Funktion.
setModel
in interface Saver
model
- Das Model mit dem der Saver arbeiten soll.
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |