dmp wrote on 30.05.2015 21:50:
> Seems to work fine, maybe I have it wrong?
>
interesting, your code indeed works.
After playing around with it, the difference is that I call getParameterMetaData() *before* calling
registerOutParameter().
This works:
cstmt = connection.prepareCall("{call sum_n_product(?,?,?,?)}");
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
cstmt.setInt(1, 2);
cstmt.setInt(2, 5);
cstmt.execute();
meta = cstmt.getParameterMetaData();
This also works:
cstmt = connection.prepareCall("{call sum_n_product(?,?,?,?)}");
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
meta = cstmt.getParameterMetaData();
cstmt.setInt(1, 2);
cstmt.setInt(2, 5);
cstmt.execute();
This does NOT work:
cstmt = connection.prepareCall("{call sum_n_product(?,?,?,?)}");
meta = cstmt.getParameterMetaData(); -- right after preparing the statement!
cstmt.registerOutParameter(3, Types.INTEGER);
cstmt.registerOutParameter(4, Types.INTEGER);
cstmt.setInt(1, 2);
cstmt.setInt(2, 5);
cstmt.execute();
So getParameterMetaData() seems to only work after all OUT parameters have been registered (I also tried calling it
afterthe first registerOutParameter() - failed as well).
So how can I retrieve the information about the parameters if I can't call getParameterMetaData() before registering
theparameters (which I try to detect by calling that method). The JDBC JavaDocs do not mention such a restriction.
Thomas