PreparedStatements 应该抛出异常而不是警告

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/PreparedStatements 抛出异常而不是这些警告?

这没什么帮助,但您可以通过调用 Connection.getWarnings()PreparedStatement.getWarnings()ResultSet.getWarnings() 来检索警告并检查那里的警告对象。这些方法都是 return 一个 SQLWarning 对象,这是一个链中的第一个;致电 warning.getNextWarning() 以查看后续消息。

当然,这意味着您必须更改所有数据库代码才能找出问题所在;抱歉,我现在没有更好的选择。如果有办法强制 JDBC 代码将这些作为真正可捕获的异常抛出,它可能是特定于驱动程序的。

您可以在 SqlExceptionHelper class 中的 "handler.prepare( warning )" 行添加一个断点,然后在调试器(至少 Intelli Idea 有)的左侧有一个堆栈跟踪(在选项卡框架上),您可以导航到执行查询的 class,然后从那里开始工作。

你还有所有调试变量等