Avatar billede apocryphal Nybegynder
13. maj 2003 - 17:01 Der er 9 kommentarer og
1 løsning

Return statement

Hey.

Der er vidst noget i min basale OOP der mangler - eller jeg har glemt det... Men:

    public int createUser(String email, String password) throws SQLException
    {
        Connection conn = source.getConnection();
        try
        {
           
            Statement stmt = conn.createStatement();

            String SQL    = "INSERT INTO sunflower.users(email, password) ";
            SQL            += "VALUES('" + email + "','" + password + "')";
           
            try
            {
                stmt.executeQuery(SQL);
            }
            catch(SQLException e)
            {
                if(e.getMessage().indexOf("Duplicate entry") > -1)
                    return UserStateStatus.USER_EXISTS;
            }
        }
        catch (SQLException e)
        {
            return UserStateStatus.DATABASE_ERROR;
        }
        finally
        {
            conn.close();
        }
       
        return UserStateStatus.USER_CREATED;
    }

Hvis denne metode når til at returnere return UserStateStatus.USER_EXISTS;

Afvikler JVM så finally blokken - eller afsluttes metoden konsekvent?

Det er jo ufedt at database-forbindelsen ikke lukkes, såfremt return kaldes midt i en try-blok.

--
Jonas
Avatar billede riversen Nybegynder
13. maj 2003 - 17:03 #1
nej...det afvikles ikke kode efter et return
Avatar billede riversen Nybegynder
13. maj 2003 - 17:04 #2
du kan jo evt. lave en int res og så sætte den istedet for dine return statements og så return res; tilsidst
Avatar billede riversen Nybegynder
13. maj 2003 - 17:04 #3
.
Avatar billede apocryphal Nybegynder
13. maj 2003 - 17:06 #4
riversen:
Thanx... Jeps - jeg laver en res-variabel og bruger den i stedet.

--
Jonas
Avatar billede disky Nybegynder
13. maj 2003 - 17:06 #5
hvis jeg husker rigtigt, bliver finally altid udført, når scope'et for try/catch/finally afbrydes.

Men du kan nemt teste det, ved at indsætte en System.out.println("Finally"); i din dinally for at se om den nåes.

Men den pæne løsning er at du kun returnerer fra et sted, ved at sætte en lokal variable og returnerer den til sidst.
Avatar billede arne_v Ekspert
13. maj 2003 - 17:07 #6
finally bliver udført selv ved return.
Avatar billede disky Nybegynder
13. maj 2003 - 17:07 #7
men jeg er i tvivl, jeg anvender normalt aldrig flere returns i samme metode, specielt ikke hvis der er ting der skal lukkes osv.

p.s. Brug connection pool's
Avatar billede riversen Nybegynder
13. maj 2003 - 17:08 #8
ok...my bad
Avatar billede arne_v Ekspert
13. maj 2003 - 17:11 #9
Så vidt jeg kan se bruger han da connection pool.

source lyder ihvertfald mere som en DataSource variabel end
som DriverManager klassen.
Avatar billede disky Nybegynder
13. maj 2003 - 17:14 #10
arne:
Det har du jo nok ret i.
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