[JAVA] Controle op SQL INSERT

Pagina: 1
Acties:

  • Crazybyte
  • Registratie: Juli 2002
  • Laatst online: 06-05 13:07
Beste Tweakers,

We zijn voor school bezig met een reisbureau applicatie. Eerder had ik al eens gepost over een MySQL Connector die niet werkte, dit is na heel wat zoek werk en hulp van jullie tot een goed einde gekomen. Echter lopen we nu alweer tegen een probleem aan.

We willen graag controleren of het INSERT statement dat we uitgevoerd hebben, goed verwerkt is en toegevoegd is, anders moet er een foutmelding komen.

De opzet is nu als volgt
Java:
1
2
3
4
5
6
7
8
9
        ResultSet rsTemp = db.databaseQuery( q );
        try
        {
        bGelukt = rsTemp.rowInserted();
        }
        catch (SQLException es)
        {
          System.out.println("FOUT: " + es.getMessage());
        }


Echter deze geeft NULL terug, dus er gaat iets fout.

Ik heb al gezocht naar andere functies onder rsTemp, maar kan niks vinden wat mij logisch lijkt om te controleren of de Query succesvol is.

Hopelijk dat iemand van jullie ons er verder mee kan helpen.

Groeten,

Crazy

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:05

Creepy

Tactical Espionage Splatterer

Zoals ik het hier even snel op google nazoek lijkt rowInserted een event te zijn die optreedt vlak voordat het record wordt toegevoegd. Je kan hiermee dus niet controleren of daadwerkelijk het record is ingevoegd. En een insert query levert over het algemeen geen result op.

Overigens hoef je niet steeds de groeten te doen en je naam neer te zetten onder je post. Je naam staat al naast je post ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Je gebruikt de verkeerde methode. Je moet de execute methode gebruiken en als het goed is gaat er een event af als er iets fout gaat. Lees vooral de API documentatie van SUN door mbt tot java.sql.Statement en java.sql.PreparedStatement.
Wat is trouwens het type van db? Dat is toch wel een statement neem ik aan?

  • Crazybyte
  • Registratie: Juli 2002
  • Laatst online: 06-05 13:07
Creepy schreef op donderdag 27 januari 2005 @ 11:40:
Overigens hoef je niet steeds de groeten te doen en je naam neer te zetten onder je post. Je naam staat al naast je post ;)
Dat is een gewoonte van mij ;)

Uit je post begrijp ik verder dat het dus eigenlijk niet 1,2,3 mogelijk is om te controleren of de rij is ingevoegd.

Dan laten we dit maar achterwege, aangezien we niet al te veel tijd meer hebben.

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 15-05 20:04
ExecuteUpdate retourneert een rowcount als het een insert, update delete statement betreft. Je zou dus de rowcount voor en na de insert query kunnen vergelijken. Al is dat wel redelijk overbodig, maar goed...

Verwijderd

Eigenlijk moet ik dit niet doen, maar ach, heb de code nu toevallig toch voor me.

int rows = command.ExecuteNonQuery();

if(rows == 1)
{
resultaat = "Record succesvol verwijderd." ;
}
else
{
resultaat = "Record kon niet worden verwijderd.";
}

dit geval is dus voor het verwijderen van een tuple.

edit: is in C# geschreven, JAVA ken t vast ok wel zoiets.

[ Voor 8% gewijzigd door Verwijderd op 27-01-2005 11:47 ]


  • Crazybyte
  • Registratie: Juli 2002
  • Laatst online: 06-05 13:07
bigbeng schreef op donderdag 27 januari 2005 @ 11:43:
Je gebruikt de verkeerde methode. Je moet de execute methode gebruiken en als het goed is gaat er een event af als er iets fout gaat. Lees vooral de API documentatie van SUN door mbt tot java.sql.Statement en java.sql.PreparedStatement.
Wat is trouwens het type van db? Dat is toch wel een statement neem ik aan?
DB is inderdaad een statement. Echter staat onze database connectie in een aparte class, met 't aanroepen van de constructor van die class word de connectie gerealiseerd.
Maar dat werkt voor zovere gelukkig wel allemaal.
FallenAngel666 schreef op donderdag 27 januari 2005 @ 11:45:
ExecuteUpdate retourneert een rowcount als het een insert, update delete statement betreft. Je zou dus de rowcount voor en na de insert query kunnen vergelijken. Als is dat wel redelijk overbodig, maar goed...
Hier heb ik ook aan zitten denken, eerst een count doen en daarna nog eens en als dat verschil 1 is dan is 't gelukt.

Maar goed, de leraar was zojuist hier en zei dat we 't niet zo uitgebreid hoefde te controleren.

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 15-05 20:04
Crazybyte schreef op donderdag 27 januari 2005 @ 11:48:
[...]


DB is inderdaad een statement. Echter staat onze database connectie in een aparte class, met 't aanroepen van de constructor van die class word de connectie gerealiseerd.
Maar dat werkt voor zovere gelukkig wel allemaal.


[...]


Hier heb ik ook aan zitten denken, eerst een count doen en daarna nog eens en als dat verschil 1 is dan is 't gelukt.

Maar goed, de leraar was zojuist hier en zei dat we 't niet zo uitgebreid hoefde te controleren.
Een rowcount is ook niet betrouwbaar natuurlijk. Stel dat jij een rowcount doet op een bepaalde tabel, iemand verwijderd 10 rows in dezelfde tabel, verolgens ga jij 1 row toevoegen en de rowcounts vergelijken. Dan klopt er dus geen zak van :)

[ Voor 7% gewijzigd door Kwistnix op 27-01-2005 12:28 ]


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 16-05 10:18

Freee!!

Trotse papa van Toon en Len!

Crazybyte schreef op donderdag 27 januari 2005 @ 11:48:
[...]
Hier heb ik ook aan zitten denken, eerst een count doen en daarna nog eens en als dat verschil 1 is dan is 't gelukt.

Maar goed, de leraar was zojuist hier en zei dat we 't niet zo uitgebreid hoefde te controleren.
De makkelijkste en betrouwbaarste manier die ik ken om te controleren of een insert goed gegaan is, is teruglezen. Als dat niet lukt, of je krijgt totaal andere waardes, dan weet je dat het fout is gegaan.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Correct me if I'm wrong, maar de rowcount die gereturned wordt is toch het aantal aangepaste/geinserte rows, niet het aantal rows in de tabel?

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 15-05 20:04
bigbeng schreef op donderdag 27 januari 2005 @ 12:40:
Correct me if I'm wrong, maar de rowcount die gereturned wordt is toch het aantal aangepaste/geinserte rows, niet het aantal rows in de tabel?
Oh, dat zou best wel eens waar kunnen zijn. Ook wel logisch eigenlijk.

  • B-Man
  • Registratie: Februari 2000
  • Niet online
JavaDocs java api

Returns:
either the row count for INSERT, UPDATE or DELETE statements, or 0 for SQL statements that return nothing

Kortom: dit soort zaken staan gewoon in de JavaDocs.

[ Voor 6% gewijzigd door B-Man op 27-01-2005 13:09 ]

Pagina: 1