繁体   English   中英

PreparedStatement应该抛出Exception而不是警告

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM