Avatar billede clemmensen Nybegynder
19. november 2002 - 12:31 Der er 6 kommentarer og
1 løsning

SQL exception

Jeg får følgende fejlmeddelelse:
java.sql.SQLException: Before start of result set. Can not call refreshRow().

-på følgende stykke kode:
public static void updatePers(Personnel p){
        Statement stmt = null;
        ResultSet rs = null;
       
        try{
            //Get a scrollable ResultSet
            Connection conn = DatabaseManager.getConnection();
            stmt = conn.createStatement(
                                        ResultSet.TYPE_SCROLL_INSENSITIVE ,    //
                                        ResultSet.CONCUR_UPDATABLE          );  //
           
            //Get a specific user record from personnel table
            rs = stmt.executeQuery( "SELECT * FROM PERSONNEL WHERE USERNAME = '"+p.getUsername()+"'" );
           
            //Move the cursor to where we need to the row we need to update
            rs.moveToCurrentRow();
           
            //Update is a part of JDBC 2.0. Here the current row is updated
            rs.updateString( "USERNAME", p.getUsername() );
            rs.updateString( "NAME", p.getName() );
            rs.updateString( "FAMILYNAME", p.getFamilyName() );
            rs.updateString( "PASSWORD", p.getPassword() );
            rs.updateString( "EMAIL", p.getEmail() );
            rs.updateString( "ADMINISTRATOR", convertBool(p.getAdministrator()));
           
            //Cause the update changes to take effect
            rs.updateRow();
           
            //Close the connection
            rs.close();
            conn.close();

Nærmere bestemt på linien med rs.updateRow();

Sjovt nok virker updatefunktionen (databaseindholdet ændres), men det er jo ret irriterende med denne exception. Hvordan løser jeg dette?
Avatar billede disky Nybegynder
19. november 2002 - 12:35 #1
Øh hvorfor select'er du først personen for derefter at ændre på denne ?

Hvorfor ikke bare sende en 'update ......' query til basen ?
Avatar billede clemmensen Nybegynder
19. november 2002 - 12:37 #2
Det er til et uniprojekt, så der skal være så meget Java som overhovedet muligt :o)
Avatar billede disky Nybegynder
19. november 2002 - 12:52 #3
okay, jeg vil dog mene at den måde du gør det på er extra besværlig.

Man skal jo ikke gøre tingene mere besværligt bare for at bruge så meget java som muligt.

Men lige hvordu man bruger moveToCurrentRow() og updateRow() kan jeg ikke hjælpe med, jeg bruger selv altid den måde jeg selv foreslog. Men hvis du finder en løsning må du gerne poste den her.

Men jeg tror det er de to metoder som driller, på en eller anden måde.
Avatar billede arne_v Ekspert
19. november 2002 - 13:15 #4
Du kan ikke bruge moveToCurrentRow i denne kontekst.

Den bruges til at flytte tilbage med efter en moveToInsertRow
(som er den du kalder hvis du vil tilføje en ny row).

I din kontekst gør moveToCurrentRow ingenting. D.v.s.
at du stadig står før første row - og der kan du ikke opdatere.

Hvad skal du så gøre ?

Det afhænger af hvad du vil. Men hvis jeg har ret i, at
du kun har en record i det pågældende result-set, så
kan du kalde en af følgende:
  next();
  absolute(1);
  first();
  last();
og placere dig på den første og eneste row.

[husk at checke retur værdi - de returnerer false
hvis det ikke er muligt fordi der ingen rows er]
Avatar billede learnmejava Nybegynder
19. november 2002 - 16:02 #5
Hej Gruppe E2-107 :-)
Avatar billede clemmensen Nybegynder
20. november 2002 - 17:53 #6
Jeg kommer til at have flere rows, så dette er måske slet ikke måden at gøre det på? Man må da kunne bruge updateRow på tabeller med flere rows :o/    ?
Avatar billede clemmensen Nybegynder
20. november 2002 - 17:57 #7
->> learnmejava; Hej dér ;o) Har I lært Java endnu? Sikke mange spørgsmål I stiller!
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