如何在SPRING

时间:2015-09-02 07:31:35

标签: java sql-server spring hibernate

我正在使用hibernate在spring中执行sql语句但是为了处理异常我使用了hibernate异常和sql异常但是我无法处理异常

如果我的sql服务器没有打开或无法访问我无法捕获异常我收到错误

org.hibernate.exception.JDBCConnectionException 

此处name.save(user);

是执行sql命令的hibernate命令

如何捕捉此类异常

我收到错误

JDBCConnectionException的无法访问的catch块。从不会从try语句主体抛出此异常

SQLException的无法访问的catch块。永远不会从try语句主体

抛出此异常

mycode的:

try
{
      ApplicationContext appContext = 
              new ClassPathXmlApplicationContext("/config/BeansInfo.xml");
    TokenBo tokenBo = (TokenBo)appContext.getBean("TokenBo");
    TokenModel token = new TokenModel();
    token.setNumber(Number);
    token.setID(ID);
}

catch(JDBCConnectionException ex  )
{
  System.out.println(ex);
}
catch(SQLException e){}

3 个答案:

答案 0 :(得分:2)

对于连接相关的异常使用 JDBCConnectionException ,对于约束违规使用 ConstraintViolationException 。您应该根据您的要求使用其他例外。见enter link description here

答案 1 :(得分:1)

除了@Tanjim Rahman,

代码段

在UserDAOImpl.java

使用ConstraintViolationException捕获重复的条目

@Override
public String addUser(User user) 
{
    Session openSession = sessionFactory.openSession();
    String retStr = null;

    try
    {
        openSession.getTransaction().begin();
        openSession.persist(user);
        openSession.getTransaction().commit();

        retStr = "success";
    }
    catch (ConstraintViolationException e)
    {
        openSession.getTransaction().rollback();

        String[] tmpArr =  e.getSQLException().toString().split(":");
        String[] anotherTmpArr = null;

        if( tmpArr.length > 1)
        {
            anotherTmpArr = tmpArr[1].split("for key");
        }

        retStr = anotherTmpArr[0];

    }
    catch (HibernateException e) 
    {
        retStr = e.getLocalizedMessage();
    }

    finally 
    {
        openSession.close();
    }


    return retStr;
}

答案 2 :(得分:0)

您可能只会捕获直接抛出的异常(至少对于已检查的异常......)。如果你真的想以任何合理的方式处理这个特定的错误情况,那么就有可能捕获到你的内容并检查提供的异常原因

try {
    // some hibernate calls
} catch (GenericJdbcException ge) {
    if(ge.getCause() != null && ge.getCause() instanceof SQLException) {
        SQLException se = (SQLException)ge.getCause();
        if(se.getErrorCode() == -911) {
            // your error handling for this case
        }else{
            throw ge; // do not swallow unhandled exceptions
        }
    }else{
        throw ge // do not swallow unhandled exceptions
    }
}

信用Oracle Community