Frage zum Erfassen von hinzufügten und entfernten Objekten

UnkiDunki

Bekanntes Mitglied
Hi,

ich habe eine Frage zu einer bestimmten Umsetzung:

Eine Person hat n Adressdaten, die in der Datenbank in einer eigenen Tabelle erfasst werden und über eine andere Tabelle mit deren IDs und der Personen-IDs miteinander verknüpft werden.

Nun habe ich ein Formular, welches in Tabs die Adressdaten anzeigt und man diese ggf. löschen kann indem man das entsprechende Tab schließt.
Wenn man dann auf "Speichern" oder "Übernehmen" klickt, sollen dann die Adressdaten bzgl. der Person aktualisiert werden.

Neue hinzugefügte Daten sind ja kein Problem, aber wie geht man mit entfernten Daten um.

1. Möglichkeit: Bevor man die vorhanden Adressdaten der Datenbank hinzufügt, löscht man zuvor alle bereits vorhandenen Adressdaten und fügt bei Löscherfolg bequem die neuen hinzu.

2. Möglichkeit: Sobald ein Tab geschlossen wird, wird ein Query abgesetzt, dass diese Adressdaten, sofern vorhanden, direkt löscht. So ist man zwar immer auf dem aktuellen Stand, aber wenn man jetzt z.B. auf "Abbrechen" geht, sind die Daten bereits "unwiederuflich" entfernt worden. Also nicht wirklich optimal.

Fazit: Die 1. Möglichkeit macht am meisten Sinn, allerdings habe ich das Gefühl, dass das ziemlich "dirty" ist, erst alle vorhandenen zu löschen und dann die INSERTs abzusetzen.
FRAGE: Gibt es da ne elegante Methode, Art und Weise, "Besitzobjekte" eines Objektes in der Art wíe oben beschrieben zu ändern bzw. aktualisieren oder wird in der Regel doch immer zur 1. Möglichkeit gegriffen?

Vielen Dank im Voraus :)
 

Firestorm87

Bekanntes Mitglied
Wie wäre es mit Option 3:

Ich merke mir, welche Daten gelöscht werden sollen und setzte den Query erst ab, wenn auf Übernehmen geklickt wird?
 
G

Gast2

Gast
Wie wäre es mit Transaktionen? Du setzt die Query ab und wenn man auf Abbrechen machst ein rollback und sonst ein commit...
 

UnkiDunki

Bekanntes Mitglied
@Firestorm87:
Ok, wäre ne Idee... neue, noch nicht gespeicherte Tabs haben sowieso keine ID und sind beim Schließen sowieso uninteressant und für die anderen könnte ich ein Array machen, in das ich bei ihrem Schließen deren IDs hinzufüge...

@SirWayne: Ja, an Transaktionen hatte ich in der Tat auch schon gedacht, nur befürchte ich dann ein Problem mit Überschneidungen, wenn man ein anderes Objekt öffnet und das gleiche macht, da ich auf ein statisches Connection-Objekt zugreife, dass sich jeder teilt... Vielleicht nicht ganz gut gelöst, aber als ich die Datenverbindung immer bei Gebrauch neu erstellt habe, also eine Instanz, wo es noch nicht statisch war, hatte ich ähnliche Probleme mit Transaktionen...
 

UnkiDunki

Bekanntes Mitglied
Also bei jedem Einsatz der DB wieder zurückschwenken zu... ?

Java:
DBConnection dbCon = new DBConnection();
dbCon.connect();
con = dbCon.getConnection();

Denn so hatte ich es anfangs...
 
G

Gast2

Gast
Nein, nutze Connection Pooling!

Und dann jedesmal wenn du eine Connection brauchst quasi ein [c]Connection con = pool.getConnection()[/c] Wie du dir eine Connection aus dem Pool holst hängt davon ab was für ein Pooling du nutzt.

Wenn DBConnection ein ConnectionPool ist neheme ich alles zurück ;)
 

UnkiDunki

Bekanntes Mitglied
Neee... brauchst nichts zurückzunehmen ;)

Empfiehlst du da einen speziellen Link zum Einsatz von Connection Pooling?
Bin jetzt schon mal auf Chapter 8 Continued: Connection Pooling gestoßen, was ganz i.O. zu sein scheint, gegenteilige Meinung?

Benutze H2 (embedded mode) und da habe ich folgende Klasse gefunden: MiniConnectionPoolManager - A lightweight standalone JDBC connection pool manager...

Die Frage ist, wie ich dieses dann benutze... kann doch nicht vor jedem Datenbankzugriff folgendes einbinden:

Java:
org.h2.jdbcx.JdbcDataSource dataSource = new org.h2.jdbcx.JdbcDataSource();
dataSource.setURL ("jdbc:h2:file:c:/temp/testDB");
MiniConnectionPoolManager poolMgr = new MiniConnectionPoolManager(dataSource, maxConnections);
...
Connection connection = poolMgr.getConnection();
...
connection.close();

Die ersten beiden Zeilen benötige ich ja z.B. nur beim Start meines Programmes... setze ich dann das auf statische Variablen, um wenigstens darauf überall Zugriff zu haben oder wie mache ich das ganze "global"?
 
Zuletzt bearbeitet:
G

Gast2

Gast
Java:
org.h2.jdbcx.JdbcDataSource dataSource = new org.h2.jdbcx.JdbcDataSource();
dataSource.setURL ("jdbc:h2:file:c:/temp/testDB");
MiniConnectionPoolManager poolMgr = new MiniConnectionPoolManager(dataSource, maxConnections);
...
Connection connection = poolMgr.getConnection();
...
connection.close();

Die ersten beiden Zeilen benötige ich ja z.B. nur beim Start meines Programmes... setze ich dann das auf statische Variablen, um wenigstens darauf überall Zugriff zu haben oder wie mache ich das ganze "global"?

Hängt immer ein bisschen davon ab wie man es gerne hat ;)

Gerne wird z.B. ein Singleton Pattern genommen um den ConnectionManager zu wrappen

Java:
public final class MyConnectionManager{
 private static MyConnectionManager instance;
 private MiniConnectionPoolManager poolMgr;

 private MyConnectionManager(){
  org.h2.jdbcx.JdbcDataSource dataSource = new org.h2.jdbcx.JdbcDataSource();
  dataSource.setURL ("jdbc:h2:file:c:/temp/testDB");
  poolMgr = new MiniConnectionPoolManager(dataSource, maxConnections);
 }

 public static MyConnectionManager getInstance(){
 if (instance == null ){
   instance = new MyConnectionManager();
 } 
 return instance;
 }
 
 public Connection getConnection(){
    return poolMgr.getConnection();
 }

}

Keine Garantie auf Tipfehler - ist nur hier im Editior zusammengeknipst. Wie du die Properties wie die URL und so setzt bleibt deiner Kreativität überlassen.

Jetzt kannst du überall in deiner Anwendung [c]MyConnectionManager.getInstance().getConnection()[/c] aufrufen.

Ist halt nur eine Möglichkeit.


EDIT:

Ja, der MiniConnectionPoolManager sieht ganz nützlich aus. Was man für ein ConnectionPooling verwendet hängt immer eng mit zusammen was man eigentlich vorhat. Für einfache Anforderungen scheint der die JDBC Pools ganz gut zu nutzen.
 
Zuletzt bearbeitet von einem Moderator:

UnkiDunki

Bekanntes Mitglied
Alles klar. Danke Dir! Werde das gleich ausprobieren :)

UPDATE: Super, funktioniert! Jetzt komme ich wieder zum eigentlichen Thema zurück: Möglichkeit 3 oder doch mit Transaktionen lösen?
Was ist da eleganter?
Wenn wir dann mit Transaktionen arbeiten, dann muss ich ja auch sicherstellen, dass die Person während ihrer Lebenszeit EINE Connection hat, oder sehe ich das falsch?

Vielleicht dazu noch ne andere Sache, sorry wegen leicht Offtopic:

Ich arbeite ja mit Personen und deren Adressdaten wie oben zu lesen... würdet ihr grundsätzlich gefragt, in der Personenklasse eine ArrayList für Adressdaten machen und die beim Instanziieren einer Person direkt befüllen, falls die Person bereits über solche Daten verfügt oder würdet ihr das unabhängig lösen und beim Öffnen des entsprechenden Detailfensters mit "eigenständigen" Objekten ( alle Adressdaten via PersonenID instanziiert) arbeiten?
Wenn man jetzt möglichst realitätsnah programmiert, wie man ja eigentlich sollte, dann doch gleich in der Klasse Person ermitteln und
dann a la
Java:
person.getAddressData.get(i)
verfahren...

Das heisst aber dann, dass ich jetzt beim Schließen eines Tabs (bei Transaktion)... ja... wo führe ich dann das DELETE aus? Bzw. ich muss dann ja irgendwie die AdressDaten in der Person aktuell halten, oder nicht... mhmmm bin verwirrt...

Sorry, für die vielen Fragen, aber sonst lerne ich es nie :D
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Frage zu Bundesliga-DB Datenbankprogrammierung 1
pkm Frage zu Encodingproblem bei einer Datenbankanbindung Datenbankprogrammierung 1
B Frage bei einer SQL Query Datenbankprogrammierung 3
B Frage zu Datenbank Design bei Events (ZenDesk) Datenbankprogrammierung 1
B SQLite Frage zu SQLite Datenbankverbindung Datenbankprogrammierung 7
M Frage zu JSON Datenbankprogrammierung 16
Psypsy Hibernate / JPA OneToOne MappedBy Frage Datenbankprogrammierung 2
P Frage zu Connection.close() Datenbankprogrammierung 4
R MySQL Frage zum Anlegen von Artikeln inkl. Verbindungen Datenbankprogrammierung 0
M Grundlegende Klassen-Design Frage Datenbankprogrammierung 0
P MySQL Frage zur Einbindung in ein Java Projekt Datenbankprogrammierung 2
I Frage zu Datenmodellierung Datenbankprogrammierung 3
J Normalisierung - Allgemeine Frage zur 3. Normalform (Eventuelle Abhängigkeit) Datenbankprogrammierung 4
F Normalisierung Datenbank Frage Datenbankprogrammierung 5
J Frage zu ResultSet Datenbankprogrammierung 3
W Frage zur Datenbankwahl bei Umstieg auf Java Datenbankprogrammierung 7
D Frage zu DISTINCT in SQL Datenbankprogrammierung 5
K Frage zur Datenprotokollierung bei DML Anweisungen Datenbankprogrammierung 3
K Frage zu SQL Datenbankprogrammierung 2
L PostgreSQL Hibernate-Frage Datenbankprogrammierung 2
K Frage zu Datenbankmodellierung Datenbankprogrammierung 15
D Generelle Frage zum Umgang mit Datensätzen Datenbankprogrammierung 5
L Frage zu UpdateQuery Datenbankprogrammierung 12
8 MySQL Kurze Frage zur Sicherheit Datenbankprogrammierung 9
D Frage zu INSERTS über mehrere Datenbanktabellen Datenbankprogrammierung 3
D Frage zu Ausführungsmöglichkeiten von SQL Befehlen Datenbankprogrammierung 13
D Frage zu SQL Syntax Datenbankprogrammierung 17
D Frage zu potenziellen Leerzeichen in einer Datenbank Datenbankprogrammierung 5
X Connection schließen oder speichern? Performance Frage Datenbankprogrammierung 7
J mal wieder eine Frage zu parallelen Transaktionen.. Datenbankprogrammierung 2
V Frage zu Hibernate-Mapping Datenbankprogrammierung 11
N Allg. Frage zur Datenbankverbindung Datenbankprogrammierung 2
E einfache Frage bei DB-Zugriff Datenbankprogrammierung 11
S MySQL Frage zu LeftJoin Abfrage Datenbankprogrammierung 2
O eigentlich simple SQL Frage Datenbankprogrammierung 2
M Frage zu folgender Query in EJB-QL Datenbankprogrammierung 4
H JBoss: Frage zur Datasource in der ...-ds.xml Datenbankprogrammierung 4
F Frage zu Prepared Statement Datenbankprogrammierung 2
R hibernate Frage zu configFile-Pfad und Groß/Kleinschreibung von Postgres-Tabellen Datenbankprogrammierung 8
M prinzipielle Frage zu Datenbanken und jars ... Datenbankprogrammierung 2
S Hibernate - spezielle Frage, n zu n Beziehung Datenbankprogrammierung 11
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
J Frage zu Synchronisation bei parallelem Zugriff, speziell mit JPA Datenbankprogrammierung 2
F EclipseLink persistence.xml Frage Datenbankprogrammierung 11
N Frage zur Sicherheit von Konfigurationsdatei Datenbankprogrammierung 4
H performance frage Datenbankprogrammierung 9
G Frage zum Insert-Statement Datenbankprogrammierung 2
Antoras Design-Frage: Datenzuordnung zu verschiedenen Accounts Datenbankprogrammierung 2
T HSQL: verständnis Frage Datenbankprogrammierung 2
T Java JPA Frage bzgl. DISTINCT Datenbankprogrammierung 2
G Frage zu connection? Datenbankprogrammierung 9
A Frage zu SQL-Abfrage Datenbankprogrammierung 2
G Frage zu SQL "WHERE IN (1, 2, 3. , N)" Datenbankprogrammierung 8
G Allgemeine Frage zu Datenbanklimits Datenbankprogrammierung 27
G allgemeine JDBC-Connection Frage Datenbankprogrammierung 2
G Frage zu Hibernate und M:N Beziehung Datenbankprogrammierung 9
K HQL Frage Datenbankprogrammierung 10
D kurze Frage zu einem Query Datenbankprogrammierung 6
B Hibernate mit MySql - Verständniss Frage Datenbankprogrammierung 8
N Kleine Frage zu Connection Pooling mit DataSource Datenbankprogrammierung 2
T Update-Frage Datenbankprogrammierung 11
E SQL-Frage (Löschen aller Datensätze) Datenbankprogrammierung 9
P Frage zu Performancetest einer Datenbank Datenbankprogrammierung 3
W Frage zum Umgang mit DB-Daten Datenbankprogrammierung 2
E Nochmal eine Datenbankabfrage Frage :-o (JOIN oder so) Datenbankprogrammierung 4
P frage zu "" bei INSERT STATEMENTS Datenbankprogrammierung 2
K frage zum ausführen eines INSERT statements Datenbankprogrammierung 16
L frage zu mySQL Datenbankprogrammierung 4
C Mal ne Frage an die Experten Datenbankprogrammierung 4
G Frage zum Datenbankdesign Datenbankprogrammierung 5
J DB Verbindung Design Frage Datenbankprogrammierung 5
M Datenbankanbindung in Java : Newbie-Frage Datenbankprogrammierung 2
U Grundsätzliche Frage Datenbankprogrammierung 4
S Frage zu INSERT Datenbankprogrammierung 2
X Wieder mal ne Frage ... Datenbankprogrammierung 15
M restdauer erfassen zwischen 2 terminen Datenbankprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben