* For procs that write to DB without returning any OUT param, I found preparedStatmeent (PS) and CS interchangeable.
* For procs that only read from DB via SELECT, I found PS and CS interchangeable.
The only CS i can’t convert to a PS are those returning something via params “{? = call proc1 @param1=?, @param2=? }”
Now If you look at the get*() methods and set*() methods, you notice an interesting discrepancy.
* getFloat() can take a paramIndex or a paramName arg, but
* setFloat() only takes paramName. Here’s why:
callableStatement3.setFloat(1, 0.95); // this method is inherited from parent interface PreparedStatement. Sets first “?” to 0.95.
callableStatement3.setFloat(“id”, 0.95); // this method is not declared in PS, since PS doesn’t support param name.
callableStatement3.getFloat(1); // this method is declared in CallableStatement interface. Reads 1st OUT param. PS doesn’t let you read anything except via a ResultSet.
callableStatement3.getFloat(“id”); // ditto
Lastly, Do not confuse the get* methods with the ResultSet.get* methods. CS get*() reads params, not rows selected.