On Fri, 10 Dec 2004, Pucky Loucks wrote:
> Hi everyone, I noticed at TODO for getMetaData() on the 8.0 and figured
> I'd give this task a try. I now am able to use Java Studio Creator
> with Postgresql 7.4.6.
>
> public ResultSetMetaData getMetaData() throws SQLException
> { ResultSet rs = null;
> checkClosed();
> rs = getResultSet();
>
> if(rs == null)
> {
> // the following code hack has not been fully tested, therefor use at
> your own risk.
> /// by Pucky Loucks of How2share Technologies (creators of PiXPO)
>
> StatementResultHandler handler = new StatementResultHandler();
>
> connection.getQueryExecutor().execute(preparedQuery,
> preparedParameters,
> handler,
> 0,
> 0,
> QueryExecutor.QUERY_ONESHOT);
> rs = handler.getResults().getResultSet();
> }
>
> return rs.getMetaData();
> }
> ===================END OF CODE HACK=====
This patch doesn't really work. It assumes that the PreparedStatement
doesn't have side effects and that all parameters have been set.
Consider:
PreparedStatement pst = con.prepareStatement("UPDATE tab SET x=x+1");
pst.getMetaData();
pst.execute();
Now all of a sudden x = x+2. Actually your patch will throw a
NullPointerException, but that's a simple code issue.
Consider:
PreparedStatement pst = con.prepareStatement("SELECT * FROM t WHERE x=?");
pst.getMetaData();
Fails with: org.postgresql.util.PSQLException: No value specified for
parameter 1.
The planned way to implement this feature is with the V3 protocol issuing
Parse/Bind/Describe/ClosePortal without ever executing it.
Kris Jurka