# Zugriff für andere sperren



## MScalli (28. Nov 2007)

Hi leutz.
bin mir gerade nicht ganz sicher 
Ist es so das ne Datenbank(jetzt ma wurscht welche, in meinem fall MySQL und/oder MSSQL) gesperrt bleibt bis das close kommt???

also ich glaube das beim 

```
Connection con=DriverManager.getConnection(bla bla);
```
die Datenbank geöffnet wird und sie solange gesperrt ist bis ich sage

```
con.close();
```

falls dies nicht der fall... dann werfe ich mal ne frage in den raum..
wie kann man die Datenbank, oder eine einzelne Tabelle explizit sperren und öffnen????


oder wird sie nur beim absetzten der einzelnen statements gesperrt..  z.B. bei nem

```
stmt.executeUpdate(sql_stmt);
```

schon mal thx @ all

gruss
MScalli


----------



## tuxedo (28. Nov 2007)

Es gibt da so Statements für MySQL die eine Tabelle abschließen (glaub "LOCK TABLE ...blablabla").

MySQL und MSSql können mehr als eine Verbindung aufrecht erhalten, womit ein einfaches Connecten nicht vo dem "feindlichen zugriffen anderer" schützt.

- Alex


----------



## Guest (29. Nov 2007)

Wie kann ich denn einen einzelnen Datensatz sperren? Bei müssen mehrere Anwender auf eine Tabell zugreifen können. Dabei ist es wichtig, dass nur der Datensatz gesperrt wird, der gerade in Bearbeitung ist.


----------



## tuxedo (29. Nov 2007)

Mit mehreren Clients direkt auf eine DB zugreifen ist keine so prickelnde Idee. I.d.R. hat man dann einen Client-Server Anwendung. Und der Server kann dann auch den Zugriff regeln ...

- Alex


----------



## ms (29. Nov 2007)

Vielleicht sind Transaktionen das was du suchst.

ms


----------



## Guest (29. Nov 2007)

@ alex0801

Ich habe hier eine Anwendung zu programmieren, die Mehrbenutzerfähig sein soll/muss. D. h. ich habe eine Datenbank, auf der mehrere Anwender Zugriff haben und auch Datensätze einfügen, bearbeiten und löschen. Anwender A bearbeitet dann z. B. Datensatz A1, Anwender B fügt gerade Datensatz B1 hinzu. Nun soll ein Anwender C natürlich nicht gleichzeitig den Datensatz B1 bearbeiten können, da es sonst Probleme gibt. Ich kann doch nicht für Anwender A eine Datenbank machen, weil er vielleicht 2 Artikel pro Monat bearbeitet und für Anwender B eine Datenbank bereitstellen nur weil dieser 2 andere Artikel pro Monat bearbeitet.

@ ms

Ist für sowas eine Transaktion geeignet?


----------



## ms (29. Nov 2007)

Ja.

ms


----------



## Guest (29. Nov 2007)

Danke. Damit ist mir geholfen. Ich werde kräftig Werbung für dieses Forum machen. Man bekommt schnell und kompetent Antwort auf Fragen. :applaus:


----------



## tuxedo (29. Nov 2007)

@Gast

Ich hatte schon verstanden was du meinst. Aber du hast scheinbar nicht verstanden was ich gemeint hab: Viele Clients die mit dem Server kommunizieren, welcher als einzigster Zugriff auf die DB hat. Somit kannst du, auch außerhalb von "Transaktionen" den kongruenten Zugriff steuern/managen. Gleichzeitig hast du so auch eine Kontrollinstanz. Interessant wird's wenn du verschiedene Zugriffsberechtigungen (außerhalb von den Datenbankeinstellbaren Zugriffsrechten) auf die DB brauchst.

Mit der Werbung für's Forum: Keine schlechte Idee. Aber ich glaub das Forum hat schon einen extrem guten Bekanntheitsgrad. Aber du könntest dich registrieren. Dann kannst du z.B. deine Beiträge nachträglich editieren oder gelöste Probleme "abhaken".

Gruß
Alex


----------



## MScalli (29. Nov 2007)

hmm... weiss nicht ob das so geht?!?!?
oder versteh ich das mit den transaktionen nicht richtig.   ???:L 

mein problem ist folgendes.
ich schreibe temporär was in eine Datenbamk um mit diesen daten dann mittels JasperReports einen bericht(pdf) zu erzeugen.(geht leider nur auf diesem weg wenn man mehrere subreports hat).
jetzt könnte ja ein anderer user zur selben zeit einen report erzeugen wollen und in der zeit zwischen dem erstellen der Tabelle des ersten users und dem erzeugen des PDF´s des ersten users die Tabelle verändern. das hätte üble folgen.
entweder müsste ich jetzt immer tabellen mit anderem namen erzeugen, oder eben diese Tabelle bis zur erstellung des PDF´s sperren!!

gruss
MScalli


----------



## ms (29. Nov 2007)

Da wäre möglicherweise die Variante von alex0801 besser.
Der Report wird ja über die Applikation gestartet also wäre es für den Benutzer fein wenn die Applikation anzeigt, dass derzeit kein Report erstellt werden kann weil bereits einer erstellt wird.
Außerdem kann das Performanceprobleme mit sich bringen wenn du temporär Tabellen erstellst und innerhalb einer Transaktion sehr sehr viele Datensätze abfragst und manipulierst.
Genauere Aussagen/Empfehlungen sind mit den gegebenen Informationen aber nicht möglich.

ms


----------



## MScalli (29. Nov 2007)

klar dauert das ein bisschen.. aber leider gibt es da keinen anderen weg. leider 

ich werd das morgen mal testen ob ich die DB gesperrt bekomme ^^
vielen dank an alle!! geb euch dann bescheid ob und wie ichs gelöst habe.


----------

