У меня есть сервлет под названием ProblemServlet
. У меня есть класс базы данных ProblemTable
. Теперь ниже приведен единственный метод из этого класса ProblemTable
.Выбрасывание исключения в сервлет
package DB;
import Controller.Common;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ProblemsTable extends DBMaster
{
public void deleteProblem(int idProblem)
{
checkConnection();
PreparedStatement ps = null;
String result="";
try
{
con.setAutoCommit(false);
String sql = "DELETE FROM Problem WHERE idProblem=?";
ps = con.prepareStatement(sql);
ps.setInt(1,idProblem);
int i = ps.executeUpdate();
con.commit();
if(i>0)
{
result="Deleted Succesfully";
}
else
{
result="Delete Failed";
}
}
catch(SQLException e)
{
e.printStackTrace();
result = "Delete Failed. Rolled back";
try {
con.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
result = "Delete failed. Rollback failed";
}
}
}
}
Как вы можете видеть, я исключаю исключение из этого класса. Однако я хотел бы поймать эти исключения внутри ProblemServlet
, потому что тогда я могу отобразить ошибку как alert()
Теперь моя проблема в этом.
Если я бросаю исключение, то я не буду в состоянии назвать con.rollback()
или ps.close
, потому что сервлет не имеет доступа к ps
или con
и доступ не может быть дано слишком.
Как я могу исключить исключение, рассматривая эти проблемы?
Да, вы можете бросить обычное исключение отсюда и обработать сервлет. –