Avatar billede jsl Nybegynder
28. juni 2005 - 22:37 Der er 11 kommentarer og
1 løsning

Slet række i SQL db.

Jeg anvender jBuilder til udvikling af et Java database program. Dataene ligger i en SQL db, og indlæses i en jdbTable. Det skal være muligt at slette en markeret post i tabellen vha. en SQL forespørgelse. Jeg er kommet hertil DELETE * FROM tabel WHERE ??? = '"+table.getSelectedRow()+"'". Hvad skal jeg skrive istedet for ??? for at kunne slette den valgte række?
Avatar billede arne_v Ekspert
28. juni 2005 - 22:41 #1
DELETE FROM tabelnavn WHERE primarykeyfelt = 'værdi'

må være løsningen (bemærk ingen * i DELETE !)
Avatar billede mikkelbm Nybegynder
28. juni 2005 - 22:42 #2
Nu kender jeg ikke jdbTable, men du må kunne få en kolonneværdi ud fra din selectedrow. Og det er så den kolonne du spørger på.

DELETE FROM tabel WHERE id = '"+table.getSelectedRow().getColum ("id") +"'"
Avatar billede mikkelbm Nybegynder
28. juni 2005 - 22:42 #3
Jeg ved så ikke om din selectedrow har en getColumn metode, men et eller andet må den ha'.
Avatar billede arne_v Ekspert
28. juni 2005 - 22:44 #4
det er vigtigt at kolonnen er primary key eller alternativt har et unique index
Avatar billede mikkelbm Nybegynder
28. juni 2005 - 23:16 #5
Så lige i deres dokumentation, at jdbTable nedarver fra JTable. Så du må kunne gøre følgende:

int columnIndex = 0; // index på kolonnen som indeholder primærnøgle

Object id = table.getModel().getValueAt(table.getSelectedRow(), index);

String sql = "DELETE FROM tabel WHERE id = '" + id + "'";


http://info.borland.com/techpubs/jbuilder/jbuilder2005/apiref/com/borland/dbswing/JdbTable.html
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JTable.html
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/table/TableModel.html
Avatar billede jsl Nybegynder
29. juni 2005 - 15:56 #6
Jeg kan ikke få det med id til at virke. Jeg har ikke defineret nogen primary key, men min db indeholder en foruddefineret key, der hedder internalrow, som jeg tænkte kunne bruges istedet for. Jeg har forsøgt at skrive internalrow = '"+id+"', men det virker ikke. Skal jeg selv definere en primary key før det virker, eller kan internalrow bruges?
Avatar billede mikkelbm Nybegynder
29. juni 2005 - 16:01 #7
Hvis du vil være sikker på hvad du sletter, er det nok en god idé at lave en primærnøgle.

Men du kan faktisk bruge hvad som helst. Hvis der er flere forekomster af betingelsen i din WHERE, vil alle blive slettet. (andet sker der ikke ved det)
Avatar billede jsl Nybegynder
29. juni 2005 - 16:13 #8
getSelectedRow retunere en værdi på rækken, så hvis nogen kan fortælle mig, hvordan jeg kan bruge internalrow - ja, så kunne det være rart.
Avatar billede mikkelbm Nybegynder
29. juni 2005 - 16:38 #9
Du må jo et eller andet sted fylde nogle data i din tabel. Her ved du også i hvilken kolonne din internalrow bliver sat.
Og så gør du bare som jeg skrev tidligere:

int columnIndex = 0; // index på kolonnen internalrow

Object internalrow = table.getModel().getValueAt(table.getSelectedRow(), columnIndex);

String sql = "DELETE FROM tabel WHERE internalrow = '" + internalrow + "'";
Avatar billede arne_v Ekspert
29. juni 2005 - 18:55 #10
hvis internalrow er en integer så skal der ikke '' omkring værdien
Avatar billede arne_v Ekspert
29. juni 2005 - 18:56 #11
og det er altså lidt vigtigt med et unikt id

jeg tror at de fleste brugere vil undre sig hvis de i en GUI markerer en række
og trykker slet og så den sletter mere end den række
Avatar billede jsl Nybegynder
29. juni 2005 - 20:46 #12
Takker pænt. Nu virker det. Jeg kendte ikke denne metode: getValueAt(table.getSelectedRow(), index), og var lige præcis denne, jeg manglede. Da jeg kun skriv getSelectedRow() kom kun værdien for internalRow. Med den nye metode, kan jeg bruge personers cpr numre som unikt id.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester