2012-07-07 4 views
1

Я разработал программу ниже, но она выбрасывает исключение исключающего указателя.null Указатель исключение на уровне dao

Ниже класс модель ..

public class Circle { 

    private int Id; 
    public Circle(int id, String name) { 
     super(); 
     Id = id; 
     this.name = name; 
    } 
    private String name; 
    public int getId() { 
     return Id; 
    } 
    public void setId(int id) { 
     Id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

} 

Ниже класс дао ..

public class jdbcdaoimpl { 
    public Circle getCircle(int circleId) 
     { 
     Circle circle = null; 

     try 
     { 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","saral","saral"); 
     PreparedStatement stmt=con.prepareStatement("select * from CIRCLE where id = ?"); 
     stmt.setInt(1,circleId); 
     ResultSet rset=stmt.executeQuery(); 
     while(rset.next()) 
     { 
      circle= new Circle(circleId, rset.getString("name")); 
     }  
     rset.close(); 
     stmt.close(); 
     con.close(); 
     }     
     catch (Exception e) 
     { 
      e.printStackTrace();    
     } 
     return circle; 
    } 
} 

и, наконец, главный класс ..

public class jdbcDemo { 

    public static void main(String[] args) { 
     Circle c = new jdbcdaoimpl().getCircle(1); 
     System.out.println(c.getName()); 
    } 

} 

пожалуйста посоветуйте как на выполнение основного класса вызывает исключение нулевого указателя.

+1

Где находится NPE? у вас есть ST? – GETah

ответ

2

Вы проглатываете все исключения в методе DAO. Он возвращает null. Он также вернет null, если запрос просто возвращает пустой результат.

Вы также не можете close ваших ресурсов в finally. Вы должны распространять свои исключения, а не ловить их без обработки.

public class JdbcDaoImpl 
{ 
    public Circle getCircle(int circleId) { 
    Connection con = null; 
    try { 
     Class.forName("oracle.jdbc.driver.OracleDriver"); 
     con = DriverManager.getConnection(
      "jdbc:oracle:thin:@localhost:1521:xe","saral","saral"); 
     final PreparedStatement stmt = con.prepareStatement(
      "select * from CIRCLE where id = ?"); 
     stmt.setInt(1,circleId); 
     final ResultSet rset = stmt.executeQuery(); 
     if (rset.next()) return new Circle(circleId, rset.getString("name")); 
     throw new RuntimeException("Result set is empty"); 
    } 
    catch (RuntimeException e) { throw e; } 
    catch (Exception e) { throw new RuntimeException(e); } 
    finally { try { if (con != null) con.close(); } catch (Throwable t) {} } 
    } 
} 
+0

не на 100% ясно, что вы сказали, не могли бы вы обновить мой пост своими предложениями? – user1508454

Смежные вопросы