我有以下方法:
public void doQuery(String q){
try{
java.sql.Statement statement.execute(q);
} catch (SQLException e){
System.out.println("query: "+q);
e.printStackTrace();
}
}
我对上述内容的意图是,因为插入中的文本值偶尔会有一个双引号导致语句失败,就是捕获错误并继续。
我的问题是,这段代码会做我想要的吗?由于这个错误,程序似乎正在终止 - 我在stderr中看到了一个我不希望看到的堆栈跟踪。
谢谢,
杰夫
答案 0 :(得分:1)
是的,您的代码将按照您所需的任何SQL异常执行您想要的操作,打印查询,然后将堆栈跟踪打印到错误流中。
如果您不想将其打印到错误流中,请删除该命令。
我建议您不要打印查询。这不是一个好习惯,因为潜在的恶意用户可能会利用有关您数据库的知识。
如果您的程序由于未处理的异常而意外终止,我认为您的例外情况不属于SqlException类型。确保捕获您可以定义的所有异常 其他catch块可以捕获更常见的异常类型。
你可以这样做:
try
{
java.sql.Statement statement.execute(q);
}
catch (SQLException e){
System.out.println("DB Exception"); // Put breakpoint here
e.printStackTrace();
}
catch(Exception e)
{
System.out.println("General Exception"); // Put breakpoint here
e.printStackTrace();
}
如果找不到意外终止的原因,则应尝试调试程序。您可以将断点放在突出显示的位置,以查看哪一个被击中。否则,您可以尝试逐步调试以找出问题所在。