Jump to content
Sign in to follow this  
petterg

JDBC - database oppdatering

Recommended Posts

Leser her:

http://java.sun.com/developer/onlineTraini...CBook/jdbc.html

 

Under overskriften "Updating the Result Set" står det at man kan oppdatere rader i resultatsettet, og deretter få databasen til å oppdatere seg slik at den passer med det modifiserte resultatet. Dette er vel en metode som vil gi fulstendig kaos om det er flere brukere som skulle finne på å oppdatere i den samme databasen samtidig?

 

F.x om en bruker kjører en oppdatering av typen

update tabell set tall = tall+1 where tall>5

Samtidig kjører en annen bruker

update tabell set tekst = "abcd" where tekst = "x"

 

Kjørt som enkelt query ville dette gå bra, men om man skal oppdatere fra et resultatsett blir vel alle rader satt lik resultatsettet, og alle oppdateringer på db imellom generering av resultatsettet og oppdateringen går vel tapt?

Share this post


Link to post
Leser her:

http://java.sun.com/developer/onlineTraini...CBook/jdbc.html

 

F.x om en bruker kjører en oppdatering av typen

update tabell set tall = tall+1 where tall>5

Samtidig kjører en annen bruker

update tabell set tekst = "abcd" where tekst = "x"

 

Kjørt som enkelt query ville dette gå bra, men om man skal oppdatere fra et resultatsett blir vel alle rader satt lik resultatsettet, og alle oppdateringer på db imellom generering av resultatsettet og oppdateringen går vel tapt?

5289609[/snapback]

 

Nå er det jo ingenting i de to spørringene som tilsier at data skal gå tapt, eller at oppdateringene ikke skal skje som du beskriver. Jeg ville tro Javas ResultSet er smart nok til å kun kjøre oppdateringer mot databasen ved rader som har endret seg. Jeg har ikke testet dette, men det er jo en smal sak å teste for. Prøblemet oppstår likevel dersom to brukere kjører spørringer/oppdateringer mot databases som oppdaterer de samme, eller noen av de samme radene.

 

Men om du har flere brukere som skal endre i databasen samtidig, lønner det seg nok ikke å gjøre det på denne måten, og det lureste er jo da å kjøre oppdateringene direkte mot databasen med en gang, som du kan gøre ved hjelp av Statement.execute() eller Statement.executeUpdate().

 

Vil du være 100% sikker på at spørringene skjer korrekt kan du benytte Statement.addBatch() for å legge til spørringer og Statement.executeBatch() for å kjøre disse spørringene dersom det ikke returneres en feil.

 

Håper det hjelper noe.

Share this post


Link to post

Kan Statement.addBatch / executeBatch gjøre noe fra eller til når brukerene skal bruke forskjellige brukernavn for å koble til databasen? Hvis ikke jeg har missforstått må alle statement i en batch kjøres som samme mysql bruker. Eller er det noen måte å bytte bruker underveis? evt noen måte å verifisere at en bruker får lov å utføre en bestemt handling før den legges til batchen?

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...