我开发了以下程序,但它抛出空指针异常。
以下是模型类..
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;
}
}
以下是dao类..
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());
}
}
请告知主要类的执行它抛出空指针异常。
答案 0 :(得分: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) {} }
}
}
资源。您必须传播您的例外情况,而不是在没有处理的情况下捕获它们。
{{1}}