当我将非法值馈送到" 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);
}
}
第一行中的错误。