当我向" 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子句。
有什么想法吗?
答案 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 ...括号未关闭