Обсуждение: DatabaseMetaData
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
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
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
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
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