snip

>
>    int sqlType = Types.VARCHAR;
>    if (!pmdKnownBroken) {
>        try {
>            sqlType = stmt.getParameterMetaData().getParameterType(i+1);
>        } catch (Exception e) { pmdKnownBroken = true; }
>    }
>    stmt.setNull(i + 1, sqlType);
>
> Possibly we'd add a new argument to the QueryRunner constructor, allowing
> you to set pmdKnownBroken to true right away.
>
/snip

IMHO -- this is a good solution.  Taking advantage of JDBC 3.0 seems like it
would be the right direction to move in rather then implementing spotty
parameter type filler classes.



>
> OPEN QUESTIONS
>
> 1) Will caching this result work?  Will it impact thread-safety in some
> negative way?
>

a)  Yes it should work.
b) Yes it will have a thread safety issue -- you'll need to synchronize on
something when setting the pmdKnownBroken variable.


>
> 2) How do we distinguish between getParameterType failing due to an
> out-of-bounds index, vs. failing due to a broken JDBC driver?  Normally we
> could use ParameterMetaData.getParameterCount() ... does that work on
> Oracle?  I don't have an instance available to test.
>

ParameterMetaData.getParameterCount() works fine, and it works fine on
oracle a well.

Thanks for taking the time to summarize and propose a solution -- hopefully
someone will pick up on your work!

Cheers,
-L

Reply via email to