我正在使用PreparedStatements写入数据库,有时我会在日志中看到以下内容:
2015-02-02 15:44:14,601 WARN SQL Warning Code: 1292, SQLState: 22007
2015-02-02 15:44:14,602 WARN Incorrect datetime value: '2011' for column 'time_end' at row 1
然而,这完全没用,因为我无法看到代码中的问题所在。是否可以强制Connection / PreparedStatements抛出异常而不是这些警告?
答案 0 :(得分:1)
这没什么帮助,但您可以通过调用Connection.getWarnings()
或PreparedStatement.getWarnings()
或ResultSet.getWarnings()
来检索警告,并检查那里的警告对象。这些方法都返回一个SQLWarning
对象,这是一个链中的第一个;致电warning.getNextWarning()
以查看后续消息。
当然,这意味着您必须更改所有数据库代码以追踪问题;对不起,我现在没有更好的选择。如果有办法强制JDBC代码将这些作为真正的可捕获异常抛出,那么它可能是特定于驱动程序的。
答案 1 :(得分:0)
你可以在SqlExceptionHelper类的行中添加一个断点:“handler.prepare(warning)”,然后在调试器(至少是Intelli Idea)的左侧(在选项卡框架上)有一个堆栈跟踪,你可以导航,直到你到达执行查询的类,并从那里开始工作。
您还拥有所有调试变量等。