[英]PreparedStatements should throw Exception instead of warning
我正在使用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 / PreparedStatement引发异常而不是这些警告?
这并没有多大帮助,但是您可以通过调用Connection.getWarnings()
或PreparedStatement.getWarnings()
或ResultSet.getWarnings()
来检索警告并在那里检查警告对象。 这些方法都返回一个SQLWarning
对象,该对象是链中的第一个对象。 调用warning.getNextWarning()
以查看后续消息。
当然,这意味着您必须更改所有数据库代码以跟踪问题。 抱歉,我现在没有更好的选择。 如果有一种方法可以强制JDBC代码将它们作为真正的可捕获异常抛出,则它可能是特定于驱动程序的。
您可以在以下行添加断点:SqlExceptionHelper类中的“ handler.prepare(警告)”,然后在调试器(至少Intelli Idea这样做)的左侧(在“框架”选项卡上)有一个堆栈跟踪,您可以对其进行导航直到到达执行查询的类,然后从那里开始。
您还具有所有调试变量,等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.