Avatar billede roo104 Nybegynder
22. september 2003 - 13:48 Der er 13 kommentarer og
2 løsninger

bubbling up exceptions

Jeg har en klasse som kan kaste en række exceptions, hvordan kan jeg få fanget de exceptions når jeg laver en instans af den klasse ?

fx:
public DBConnect(String host, String db, String user, String pass)
throws ClassNotFoundException, InstantiationException, SQLException, IllegalAccessException, ConnectException {
          Class.forName("com.mysql.jdbc.Driver").newInstance();

this.conn = DriverManager.getConnection("jdbc:mysql://"+host+"/"+db+"?user="+user+"&password="+pass+"");
}

og når jeg laver en instans af den klasse
try {
        DBConnect db = new DBConnect("localhost","xxxx","xxxxx","xxxxx");
}
catch { ..... de fejl der blev kastet

På den måde jeg jeg har lavet det får jeg bare en NullPointerException, jeg får ikke de fejl med op.
Avatar billede roo104 Nybegynder
22. september 2003 - 13:49 #1
Hvis databasen ikke er tilgængelig skulle den gerne kaste en SQLException og ConnectException
Avatar billede websmith Nybegynder
22. september 2003 - 13:56 #2
catch(SQLException se)
{
}
catch(ConnectException ce)
{

}
catch(Exception e)
{

}

Lige i "Røven" på hinanden, dvs. du indsætter den mest specifikke øverst, og den mindst specifikke nederst.
Avatar billede websmith Nybegynder
22. september 2003 - 13:57 #3
Hvis ConnectException arver fra SQLException, så skal den ligge over SQLException osv, Hvis SQLException og ConnectException begge arver fra Exception, så er det lige meget med rækkefølgen på de to.
Avatar billede websmith Nybegynder
22. september 2003 - 13:59 #4
Hvis du har flere exception klasser end de to, så bruger du bare samme regel, med de mest specifikke øverst og de mindst nederst, eller sagt på en anden måde, Exception skal altid være den sidste, da det er "the mother of all exception" :)
Avatar billede roo104 Nybegynder
22. september 2003 - 14:02 #5
Sådan har jeg det også, men det er som om at når jeg siger DBConnect db = new DBConnect("localhost","xxxx","xxxxx","xxxxx"); kaster den ikke exceptionsene, derfor får jeg en NullPointerException når jeg forsøger aqt bruge db
Avatar billede websmith Nybegynder
22. september 2003 - 14:09 #6
DriverManager.getConnection

Kaster den en exception overhovedet?
Avatar billede roo104 Nybegynder
22. september 2003 - 14:11 #7
den kaster SQLException
Avatar billede websmith Nybegynder
22. september 2003 - 14:12 #8
Dvs. Du gør følgende:

try
{
        DBConnect db = new DBConnect("localhost","xxxx","xxxxx","xxxxx");
}
catch(SQLException se)
{
}
catch(ConnectException ce)
{

}
catch(Exception e)
{

}

Og så et eller anden ala

db.xxx("test")
Avatar billede roo104 Nybegynder
22. september 2003 - 14:14 #9
try
{
        DBConnect db = new DBConnect("localhost","xxxx","xxxxx","xxxxx");
Statement stmt = db.getConn().createStatement();
        ResultSet RS = stmt.executeQuery(query);
}
catch(SQLException se)
{
}
catch(ConnectException ce)
{

}
catch(Exception e)
{

}
Avatar billede roo104 Nybegynder
22. september 2003 - 14:16 #10
tror det er Statement stmt der kaster NullPointerException, men der burde være fanget SQLEXception inde da
Avatar billede roo104 Nybegynder
22. september 2003 - 14:25 #11
Waaaahhh exceptionsene blev fangt af en jsp side, så skulle da bare restarte Tomcat, så virkede det hele, eller tak for dit forsøg på at hjælpe selvom der ikke var noget problem
Avatar billede arne_v Ekspert
22. september 2003 - 14:26 #12
Du skal vælge en fejl håndterings strategi.

Enten:
  - catcher DBConnect alle exceptions
  - DBConnect returnerer en valid Connection hvis ok og null hvis fejl
  - DBConnect thrower inden exceptions
  - den kaldende kode catcher ingen exceptions
  - den kaldende kode tester på null

Eller:
  - DBConnect catcher ingen exceptions
  - DBConnect thrower alle connections
  - den kaldende kode catcher exceptions

Men ingen blandinger.
Avatar billede roo104 Nybegynder
22. september 2003 - 14:29 #13
havde valgt den nederste, syntes jeg er nemmest
Avatar billede roo104 Nybegynder
22. september 2003 - 14:31 #14
en anden ting kan man ikke lave en custom classe som fanger exceptions og så bare fange den custom klasse ?
Avatar billede arne_v Ekspert
22. september 2003 - 14:37 #15
Exception catch er nødt til at ligge på det niveau hvor hvor man ønsker
at catche exceptions.

Det er muligt at skrive en klasse til at processe exceptiosn. Men jeg
kan ikke helt se pointen.

Det bruges i et vist omfang at catche X exceptions og istedetfor at
throwe en custom exception.
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