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
Annonceindlæg fra Barco
nej...det afvikles ikke kode efter et return
du kan jo evt. lave en int res og så sætte den istedet for dine return statements og så return res; tilsidst
riversen: Thanx... Jeps - jeg laver en res-variabel og bruger den i stedet. -- Jonas
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.
finally bliver udført selv ved return.
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
Så vidt jeg kan se bruger han da connection pool. source lyder ihvertfald mere som en DataSource variabel end som DriverManager klassen.
arne: Det har du jo nok ret i.
Kurser inden for grundlæggende programmering