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是非法的时候,我想获得一个例外。但是,我不明白为什么没有触发捕获子句。

有什么想法?

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

insert into Table_1 (id) values(?)
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);
    }
}

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

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

其次,我觉得记录器无法正确初始化,因此 catch 块的功能不可见。但是,由于 ex.printstacktrace((

,您正在获得错误堆栈跟踪

您有一个无效的SQL语句:

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

问题不在尝试捕获块中,如果是这种情况,则应该通过try catch处理。这只是一个错误的SQL语句。我建议准备好陈述教程,并尝试捕获教程。

在同时尝试以下解决方案。

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);
    }
}

第一行中的错误。

最新更新