Обсуждение: DatabaseMetaData

Поиск
Список
Период
Сортировка

DatabaseMetaData

От
Glenn Holmer
Дата:
Can someone give me the right incantation to get the names of the
columns in a table using DatabaseMetaData?  I'm trying

dmd = conn.getMetaData();
rs = dmd.getColumns("pg_attribute", "public", "tsoldto", null);
while (rs.next()) {

(where "tsoldto" is the name of my table) and not getting anything in
the result set.  What is that last argument supposed to be if I want to
retrieve all the column names, and are the first two correct?

--
____________________________________________________________
Glenn Holmer                          gholmer@weycogroup.com
Software Engineer                        phone: 414-908-1809
Weyco Group, Inc.                          fax: 414-908-1601

Re: DatabaseMetaData

От
Kris Jurka
Дата:

On Mon, 22 May 2006, Glenn Holmer wrote:

> Can someone give me the right incantation to get the names of the
> columns in a table using DatabaseMetaData?  I'm trying
>
> dmd = conn.getMetaData();
> rs = dmd.getColumns("pg_attribute", "public", "tsoldto", null);
>
> (where "tsoldto" is the name of my table) and not getting anything in
> the result set.  What is that last argument supposed to be if I want to
> retrieve all the column names, and are the first two correct?
>

The first argument should be your database name, but this is not actually
causing a problem because that parameter is ignored because pg does not
support cross database calls.  Other than that it looks good.  Are you
sure it's in the public schema?  Are you sure it wasn't created with a
case sensitive table name "tSoldTo" or something?

Kris Jurka

Re: DatabaseMetaData

От
Glenn Holmer
Дата:
On Monday 22 May 2006 18:17, you wrote:
> The first argument should be your database name, but this is not
> actually causing a problem because that parameter is ignored because
> pg does not support cross database calls.  Other than that it looks
> good.  Are you sure it's in the public schema?  Are you sure it
> wasn't created with a case sensitive table name "tSoldTo" or
> something?

Thanks.  The DDL to create the table was:

CREATE TABLE tsoldto(
  uid_pk      INTEGER
...

and I found that while this works:

dmd = conn.getMetaData();
rs = dmd.getColumns("licensee", "public", "tsoldto", "%");
// rs = dmd.getColumns("licensee", "public", "tSoldTo", "%");
while (rs.next()) {
  columnNames.add(rs.getString("COLUMN_NAME"));
}
rs.close();

using the commented-out line does not.  I thought table names were
case-insensitive? (this is with Postgres 8.0.3 and build 316 of the
JDBC driver).

--
____________________________________________________________
Glenn Holmer                          gholmer@weycogroup.com
Software Engineer                        phone: 414-908-1809
Weyco Group, Inc.                          fax: 414-908-1601

Re: DatabaseMetaData

От
Oliver Jowett
Дата:
Glenn Holmer wrote:

> I thought table names were
> case-insensitive?

They are case sensitive, but forced to lowercase when used unquoted in a
query. See DatabaseMetaData.supportsMixedCaseQuotedIdentifiers() etc.

-O

Re: DatabaseMetaData

От
Glenn Holmer
Дата:
On Tuesday 23 May 2006 08:50, Oliver Jowett wrote:
> Glenn Holmer wrote:
> > I thought table names were
> > case-insensitive?
>
> They are case sensitive, but forced to lowercase when used unquoted
> in a query. See DatabaseMetaData.supportsMixedCaseQuotedIdentifiers()
> etc.

Thanks all, working great now.

--
____________________________________________________________
Glenn Holmer                          gholmer@weycogroup.com
Software Engineer                        phone: 414-908-1809
Weyco Group, Inc.                          fax: 414-908-1601