对于jdbc代码段里出现的异常,可以处理则处理,无法处理则向上抛出
dao层代码
public interface ClassDao {
Integer addClass(ClassEntity classEntity);
int[]addbatch();
}
daoimple代码
@Override
public Integer addClass(ClassEntity classEntity) {
Connection conn=null;
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
Integer id=null;
try {
conn=DBUtils.getConn();
preparedStatement=conn.prepareStatement("insert into class (name,sid)values(?,?)",Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, classEntity.getName());
preparedStatement.setInt(2, 1);
preparedStatement.executeUpdate();
resultSet=preparedStatement.getGeneratedKeys();
if(resultSet.next()){
id=resultSet.getInt(1);
}
return id;
} catch (SQLException e) {
e.printStackTrace();
throw new DaoException(e.getMessage(),e);
}finally{
DBUtils.closeConnection(conn);
}
}
如果imple不catch异常转而throws出去道理上是可以的,但是需要修改接口,为了原生化接口,我们可以使用非检查性异常。
非检查性异常就是在编译期不会强制要求捕获或抛出异常,如果运行期出了异常则会抛出并且终止代码运行。
在这里使用非检查性异常的好处在于在不污染接口的前提下,可以正确抛出异常给上层,更好的终止代码,减少不同功能代码之间的耦合。
DaoException是自定义异常,继承了RuntimeException类。