Avatar billede learnmejava Nybegynder
14. november 2002 - 00:32 Der er 20 kommentarer og
1 løsning

Update JAVA

Hejsa
Der er mange ponits at hente her, for jeg er virkelig lost.
Jeg skal have et objekt ud af min database opdatere det og sætte det ind igen - men hvordan? Jeg har prøver ca. 1000 forskellige ting, men det vil bare ikke som jeg vil.
---------------
Oplysninger:
- Klassen objekter tilhører hedder "Glider"
- Atributter på Glider:
    - int gliderid,
    - String glidertype,
    - boolean gliderstatus,
    - int gliderseats,
    - double gliderflighthour

- Forbindelsen til DB oprettes i klassen "DatabaseForbindelse"
--------------
Det jeg så skal have lavet er:
Man vælger et "gliderid", og skal så kunne opdaterer de andre atributter.
Skriv endelig hvis du mangler nogle oplysninger. JEg vil blive lykkelig for noget kode, men en god forklaring på hvordan det skal gøres vil da også hjælpe - TAK!
Avatar billede arne_v Ekspert
14. november 2002 - 07:42 #1
Der er flere mulige løsninger.

1) Hvis du er i et J2EE environment kan du bruge
  en EJB entity bean. Så kan du finde et objekt
  på primær-nøgle, updatere felter og få objektet
  skrevet tilbage til databasen. Du skal ikke
  engang selv skrive koden til at finde objektet
  og skrive tilbage til databasen. Men det krævet
  altså lidt af environment.

2) JDO. SOm jeg ikke ved ret meget om.

3) JDBC.

  Du laver et statement med SELECT med WHERE, som finde
  den rigtige record. Så henter du alle felter far recorden
  over i objektet. Så kan du opdatere de felter du vil
  opdatere. Og så bruger du en UPDATE med WHERE til
  at opdatere databasen.

Jeg kan forklare deig mere om entity beans eller om
JDBC kald og SELECT/UPDATE SQL statements.
Avatar billede arne_v Ekspert
14. november 2002 - 07:56 #2
JDBC vil vær enoget i stil med:

ResultSet rs = stmt.executeQuery("SELECT * FROM Glider WHERE gliderid=" + id);

if(rs.next()) {
    gliderid = id;
    glidertype = rs.getString("glidertype");
    gliderstatus = rs.getBoolean("gliderstatus");
    ...
}
stmt.executeUpdate("UPDATE Glider SET glidertype='" + glidertype +
                  "',gliderstatus=" + gliderstatus +
                  "... WHERE gliderid=" +id);

(du kan selv sætte ind for ...)

Man kan muligvis med fordel bruge PreparedStatement
i.s.f. Statement.

Og det vil også være hurtigere at accesse
felter via nummer i.s.f. navn.
Avatar billede learnmejava Nybegynder
14. november 2002 - 12:48 #3
Jeg bruger JDBC. Men hvis jeg gør som du skriver, hvordan får jeg så lov at skrive de nye værdier for fx. "glidertype"?
Avatar billede learnmejava Nybegynder
14. november 2002 - 12:51 #4
DEt er nemlig noget i stil med det du skriver jeg har prøvet, men jeg kunne ikke finde ud af at få nye værdier sat ind
Avatar billede arne_v Ekspert
14. november 2002 - 13:31 #5
Ovenstående bygger på at du:

1)  henter værdien af glidertype fra databasen

ResultSet rs = stmt.executeQuery("SELECT * FROM Glider WHERE gliderid=" + id);

glidertype = rs.getString("glidertype");

2)  du opdaterer værdien af glidertype helt normalt

3)  du skriver den opdaterede værdi tilbage til databasen

stmt.executeUpdate("UPDATE Glider SET glidertype='" + glidertype +
                  "',gliderstatus=" + gliderstatus +
                  "... WHERE gliderid=" +id);
Avatar billede arne_v Ekspert
14. november 2002 - 13:32 #6
Er det updaten du ikke kan få til at virke eller ?
Avatar billede learnmejava Nybegynder
14. november 2002 - 13:45 #7
det er punkt 2
Avatar billede learnmejava Nybegynder
14. november 2002 - 13:48 #8
det er punkt 2
Avatar billede arne_v Ekspert
14. november 2002 - 13:55 #9
glidertype er jo bare en variabel som du
opdaterer ligesom alle andre variable.

glidertype = "test";
Avatar billede learnmejava Nybegynder
14. november 2002 - 14:03 #10
Ahh damn selvfølgelig - men hvis det nu skulle sættes lig med noget man indtastede i en GUI? Skal der så bare stå fx.
glidertype = '" + input.getGlidertype() + "';
eller hvad?
Avatar billede arne_v Ekspert
14. november 2002 - 14:09 #11
Du kan lave:

glidertype = input.getGlidertype();

stmt.executeUpdate("UPDATE Glider SET glidertype='" + glidertype +
                  "',gliderstatus=" + gliderstatus +
                  "... WHERE gliderid=" +id);

eller:

stmt.executeUpdate("UPDATE Glider SET glidertype='" + input.getGlidertype() +
                  "',gliderstatus=" + gliderstatus +
                  "... WHERE gliderid=" +id);

etc.
Avatar billede learnmejava Nybegynder
14. november 2002 - 14:21 #12
Okay, jeg vil arbejde lidt med det her i eftermiddag, så vender jeg lige tilbage med en melding på hvordan det gik - foreløbig mange tak
Avatar billede kasseper Nybegynder
14. november 2002 - 14:37 #13
Hvis det ikke lykkes, så smid den kode du prøver at få til at virke, så kan vi gi dig hints hvor du skal sætte ind, så lærer du også lidt mere iforhold til hvis vi bare laver det fra bunden...!
Avatar billede learnmejava Nybegynder
14. november 2002 - 16:10 #14
Okay, det virker ikke helt...
Kode fra class Glider
-------------
      public static void getGlider() throws SQLException, ClassNotFoundException
      {
      int gid = 72; //input.getGliderid();
      String glidertype = "Opdateret"; //input.getGlidertype();
      int gliderseats =  3; //input.getGliderseats();
      boolean gliderstatus = false; //input.getGliderstatus();
      double gliderflighthours = 12.12; //(input.getGliderflighthours();
     
      DatabaseForbindelse d = new DatabaseForbindelse();
      d.getGlider(gid, glidertype, gliderseats, gliderstatus, gliderflighthours);
      }
-------------
Kode fra Class DatabaseForbindelse
-------------   
public void getGlider(int gidU, String glidettypeU, int gliderseatsU, boolean gliderstatusU, double gliderflighthoursU) throws ClassNotFoundException, SQLException
    {
    stmt.executeUpdate("UPDATE glider SET glidertype='" + glidertypeU + "', gliderstatus='" + gliderstatus +"', gliderseats="+ gliderseats +", gliderflighthours='"+ gliderflighthours +"' WHERE gliderid=" +gidU);
    }
-------------
Fejl:
------------
cannot resolve symbol
symbol: variable glidertypeU location class DatabaseForbindelse
-------------
Avatar billede arne_v Ekspert
14. november 2002 - 16:13 #15
Du har stavet forkert i argument-listen !

public void getGlider(int gidU, String glidettypeU
                                            ^
Avatar billede arne_v Ekspert
14. november 2002 - 16:14 #16
Jeg ville iøvrigt nok vælge et andet navn end
getGlider til en UPDATE metoden - det giver nogle misvisende
associationer.
Avatar billede learnmejava Nybegynder
14. november 2002 - 16:25 #17
Det er da stavet rigtig nok er det ik?????
Avatar billede learnmejava Nybegynder
14. november 2002 - 16:29 #18
Det er i denne linie den mener der er fejl:
-------------
    stmt.executeUpdate("UPDATE glider SET glidertype='" + glidertypeU + "', gliderstatus='" + gliderstatus +"', gliderseats="+ gliderseats +", gliderflighthours='"+ gliderflighthours +"' WHERE gliderid=" +gidU);
Avatar billede arne_v Ekspert
14. november 2002 - 16:29 #19
String glidettypeU
glidertypeU

t <-> r

(ja min ^ kom ikke til at stå rigtigt efter den var sendt)
Avatar billede arne_v Ekspert
14. november 2002 - 16:30 #20
Nej - jeg tror faktisk at det er i argument-listen, at du
har stavet glidertypeU forkert.
Avatar billede learnmejava Nybegynder
14. november 2002 - 16:35 #21
Ja, det var stavefejl...
Jeg takker mange gange men vender nok tilbage inden længe med et nyt problem  :-)
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