From: | stefanlack(at)gmx(dot)de |
---|---|
To: | pgsql-jdbc(at)postgresql(dot)org |
Subject: | ResultSetMetaData precise typ information |
Date: | 2005-07-21 11:45:54 |
Message-ID: | 28723.1121946354@www56.gmx.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
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);
}
..
}
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)
The same problem holds for character varying(x)
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.
Thanks,
Stefan Lack
--
5 GB Mailbox, 50 FreeSMS http://www.gmx.net/de/go/promail
+++ GMX - die erste Adresse fr Mail, Message, More +++
From | Date | Subject | |
---|---|---|---|
Next Message | Dave Cramer | 2005-07-21 14:40:58 | Re: ResultSetMetaData precise typ information |
Previous Message | Dave Cramer | 2005-07-21 01:37:32 | Re: Timestamp Conversion Woes Redux |