try-catch子句不起作用

时间:2017-04-25 12:03:09

标签: java sql sql-server exception-handling try-catch

当我向" ID"提供非法值时,我希望"尝试"失败并触发" catch"子句。

PreparedStatement ps1=conn.prepareStatement("insert into Table_1(id values(?)");    
try{
    ps1.setString(1,ID);
    ps1.executeUpdate();
    conn.commit();
} catch(Exception EX){
    logger.error("Failed insert to table "+v.getId());
    logger.error(EX.getMessage(), EX);
    EX.printStackTrace();
    try{
        conn.rollback();
    }catch(Exception ex){
        ex.printStackTrace();
        logger.error("Cannot rollback connection");
        logger.error(ex.getMessage(),ex);
        System.exit(1);
    }
}

相反,我得到以下异常,程序终止。似乎该问题已连接到" ps1.executeUpdate();"线。

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Disallowed implicit conversion from data type ntext to data type varchar, table 'Table_1', column 'id'. Use the CONVERT function to run this query.

我可以获得例外,此外,我想在ID非法时获得例外。但是,我不明白为什么没有触发catch子句。

有什么想法吗?

6 个答案:

答案 0 :(得分:0)

SQL字符串不正确。这样做:

insert into Table_1 (id) values(?)

答案 1 :(得分:0)

try{
    PreparedStatement ps1=conn.prepareStatement("insert into Table_1(id) values(?)");
    ps1.setString(1,ID);
    ps1.executeUpdate();
    conn.commit();
} catch(Exception EX){
    logger.error("Failed insert to table "+v.getId());
    logger.error(EX.getMessage(), EX);
    EX.printStackTrace();
    try{
        conn.rollback();
    }catch(Exception ex){
        ex.printStackTrace();
        logger.error("Cannot rollback connection");
        logger.error(ex.getMessage(),ex);
        System.exit(1);
    }
}

答案 2 :(得分:0)

首先,查询缺少括号。 正确的查询是:

PreparedStatement ps1 = conn.prepareStatement("insert into Table_1(id) values(?)");    

其次,我觉得记录器未正确初始化,因此 catch 块的功能不可见。但是,由于 EX.printStackTrace()

,您将获得错误堆栈跟踪

答案 3 :(得分:0)

您的SQL statement无效:

conn.prepareStatement("insert into Table_1(id) values(?)"); 

答案 4 :(得分:0)

问题不在try catch块中,如果是这种情况则应该由try catch处理。 这只是一个错误的sql语句。我建议使用Prepared statement tutorials,以及Try catch tutorials

同时尝试以下解决方案。

PreparedStatement ps1=conn.prepareStatement("insert into Table_1(id) values(?)"); 

try{
    ps1.setString(1,ID);
    ps1.executeUpdate();
    conn.commit();
} catch(Exception EX){
    logger.error("Failed insert to table "+v.getId());
    logger.error(EX.getMessage(), EX);
    EX.printStackTrace();
    try{
        conn.rollback();
    }catch(Exception ex){
        ex.printStackTrace();
        logger.error("Cannot rollback connection");
        logger.error(ex.getMessage(),ex);
        System.exit(1);
    }
}

答案 5 :(得分:0)

第一行错误。输出")"除了id ...括号未关闭