Java:stderr并发现异常

时间:2014-01-05 09:15:51

标签: java exception-handling

我有以下方法:

 public void doQuery(String q){
        try{
           java.sql.Statement statement.execute(q);
        } catch (SQLException e){
             System.out.println("query: "+q);
             e.printStackTrace(); 
        }
     }

我对上述内容的意图是,因为插入中的文本值偶尔会有一个双引号导致语句失败,就是捕获错误并继续。

我的问题是,这段代码会做我想要的吗?由于这个错误,程序似乎正在终止 - 我在stderr中看到了一个我不希望看到的堆栈跟踪。

谢谢,

杰夫

1 个答案:

答案 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(); 
    }

如果找不到意外终止的原因,则应尝试调试程序。您可以将断点放在突出显示的位置,以查看哪一个被击中。否则,您可以尝试逐步调试以找出问题所在。