Gå til innhold

JDBC - database oppdatering


Anbefalte innlegg

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?

Lenke til kommentar
Videoannonse
Annonse
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.

Lenke til kommentar

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?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...