Re: ResultSetMetaData precise typ information

From: Dave Cramer <pg(at)fastcrypt(dot)com>
To: stefanlack(at)gmx(dot)de
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: ResultSetMetaData precise typ information
Date: 2005-07-21 14:40:58
Message-ID: 24A56AB2-157F-42B6-86E2-2938646BFE3F@fastcrypt.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc


On 21-Jul-05, at 7:45 AM, stefanlack(at)gmx(dot)de wrote:

> I'm interested in retrieving the most
> precise type information as possible from PreparedStatements.
> I'm using this driver: 8.1dev-400 JDBC 3
>
> 1) ResultSetMetaData.getTableName(int column) is returning "".
> Isn't it possible to return the result of getBaseTableName(int
> column) in
> getTableName, like this
>
> public abstract class AbstractJdbc2ResultSetMetaData .. {
> ..
> public String getTableName(int column) throws SQLException
> {
> //return "";
> return getBaseTableName(column);
> }
> ..
> }

You're correct, does anyone know why getTableName is returning "",

when getBaseTableName is implemented ?

>
> 2)Is there a way to determine "length information" for result types in
> perpared statements?
>
> The goal is not to get the length of the actual result after
> executing the
> query, of course!
> Example:
> String query = "SELECT a, b,c FROM table1,table2;
> PreparedStatement stmt = getConnection().prepareStatement(query);
> ResultSetMetaData data = stmt.getMetaData();
>
> For bit values
> If "a" is a bit(x) column, is it possible to retrieve the value
> of x from
> the ResultSetMetaData?
> Both "data.getScale(index)" and "data.getPrecision(index)" are
> returning
> "0", not the value expected (e.g. bit(21) -> 21)
getPrecision is defined as the number of digits to the left of the
decimal, so this should be 1
getScale is defined as the number of digits to the right, this should
be 0
>
> The same problem holds for character varying(x)
This appears to be wrong in the driver, as it is returning 0.
>
> One could use the
> DatabaseMetaData.getTables(...) method. The retrieved ResultSet
> contains
> many usefull data,
> like
> this:
> rset.getInt("COLUMN_SIZE"),rset.getInt("DECIMAL_DIGITS"),rset.getInt
> ("CHAR_OCTET_LENGTH").
>
> But I can see no way to identify the query results' columns. In the
> example:
> - is "a" referencing "table1" or "table2" ?
> - In the query "Select a as b from table1;" the
> data.getColumnName(index) will return "b", so the true columnname
> is not
> available.
> May it be possible to get a reference to the original column, or
> is this
> feature not part of of the current jdbc Specification?
>
> 3) ResultSetMetaData.isNullable(int column) returns not always
> expected
> information when used for prepared Statements
> Example:
>
> String query = "SELECT a, b,c FROM table1 WHERE a notnull and b
> notnull
> and c notnull
> PreparedStatement stmt = getConnection().prepareStatement(query);
> ResultSetMetaData data = stmt.getMetaData();
>
> now, data.isNullable(1),data.isNullable(2),data.isNullable(3) are
> returning
> 1.
> I'm aware of the fact that the column "a" is maybe nullable due to
> the table
> definition,
> but clearly in this query a,b,c can never be null values.

I'm pretty sure that isNullable(n) refers to the attribute of the
table, not the data itself.
>
>
> Thanks,
>
> Stefan Lack
>
> --
> 5 GB Mailbox, 50 FreeSMS http://www.gmx.net/de/go/promail
> +++ GMX - die erste Adresse f�r Mail, Message, More +++
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 4: Have you searched our list archives?
>
> http://archives.postgresql.org
>
>

Dave Cramer
davec(at)postgresintl(dot)com
www.postgresintl.com
ICQ #14675561
jabber davecramer(at)jabber(dot)org
ph (519 939 0336 )

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Christian Cryder 2005-07-21 15:13:31 Re: Timestamp Conversion Woes Redux
Previous Message stefanlack 2005-07-21 11:45:54 ResultSetMetaData precise typ information