MySQL JDBC debugging: dumpMetadataOnColumnNotFound doesn’t
A short note, for the purpose of seeding Google1 with some useful information:
If you find yourself trying to debug why MySQL’s JDBC driver might be raising a
“Column ‘e.Name’ not found” exception resulting from a call to
ResultSet.findColumn
, you might look into the MySQL Connector/J
configuration reference and find the interesting-looking
dumpMetadataOnColumnNotFound
property, described therein as “Should the
driver dump the field-level metadata of a result set into the exception message
when ResultSet.findColumn() fails?”
The documentation says that this property is available “since version 3.1.13”.
The documentation lies.
It turns out that dumpMetadataOnColumnNotFound
was introduced in
Connector/J 3.1.13, but only to the 3.1.x branch — it doesn’t appear that
it made it into any later version in any other branch.
As to why you might be running into this problem in the first place: it looks like there was a bug / change in behaviour (delete as appropriate) introduced in either MySQL server 5.something or Connector/J 5.something (details are unclear) such that after issuing a query like this:
SELECT a1.col1 AS data FROM TableA AS a1, TableA AS a2
calling ResultSet.getString("a1.col1")
no longer works — in this case, you
need to use ResultSet.getString("col1")
, but the right column name to use
differs depending on the original query: in some cases the first option might
be correct!
I think this problem is the same as reported in MySQL bugs #35610 and/or #35150, but it’s hard to tell exactly what’s going on.
Did I mention how much I dislike MySQL recently?
-
Other search engines are available. ↩