metadata.getColumns() using Apache Tomcat / jndi - Mailing list pgsql-jdbc

From Thomas Strunz
Subject metadata.getColumns() using Apache Tomcat / jndi
Date
Msg-id DUB114-W45402DA072DA2469848E6FEEF70@phx.gbl
Whole thread Raw
Responses Re: metadata.getColumns() using Apache Tomcat / jndi
Re: metadata.getColumns() using Apache Tomcat / jndi
List pgsql-jdbc
Hi all,

issue affects 9.1-901.jdbc4  and 9.0-801.jdbc4 driver.

i have following java code:

<pre>
            Connection conn = dataSource.getConnection();
            DatabaseMetaData metaData = conn.getMetaData();
            this.databaseProductName = metaData.getDatabaseProductName();
            ResultSet rsColumns = metaData.getColumns(
                    null, null, tableName, null);
            while (rsColumns.next()) {
                //..do work
            }
            rsColumns.close();
            conn.close();
</pre>

This works fine when initializing the PostgreSQL DataSoource manually as in:
<pre>
        PGSimpleDataSource dataSource = new PGSimpleDataSource();
        dataSource.setDatabaseName(postgresqlDatabaseName);
        dataSource.setServerName(postgresqlHost);
        dataSource.setUser(postgresqlUser);
        dataSource.setPassword(postgresqlPW);
        return dataSource;
</pre>

If I want to get the datasource from jndi / tomcat as in:

<Resource name="jdbc/Zinc"
            auth="Container"
            type="javax.sql.DataSource"
            username="yyyyyy"
            password="xxxxxx"
            driverClassName="org.postgresql.Driver"
            url="jdbc:postgresql:Zinc"
            maxActive="20"
            maxIdle="4"/>

the result set returned by metaData.getColumns(null, null, tableName, null) is always empty.

However if I use MySQL, SQL Server or HSQLDB the code also works in tomcat eg.

<Resource name="jdbc/Zinc"
            auth="Container"
            type="javax.sql.DataSource"
            username="sa"
            password=""
            driverClassName="org.hsqldb.jdbcDriver"
            url="jdbc:hsqldb:hsql://localhost/ZincDB"
            maxActive="20"
            maxIdle="4"/>

works perfectly fine and metaData.getColumns returns exactly what I would expect.

My table name only contains letters and is all lower case (postgresql jdbc is IMHO a bit quirky since table and field names seem to be partially case-sensitive).

Any ideas? Bug? the problem does seem to be a postgresql issue (and not tomcat)  because code works fine for other JDBC Drivers.

Thanks for your help.

pgsql-jdbc by date:

Previous
From: Mikko Tiihonen
Date:
Subject: Re: Collection of small fixes to binary transfer code and unit tests
Next
From: Dave Cramer
Date:
Subject: Re: metadata.getColumns() using Apache Tomcat / jndi