Apache Derby: Retrieve column names for an empty table

和自甴很熟 提交于 2019-12-12 19:23:45

问题


In JDBC metadata is not set, if the result set is empty, so I cannot execute getColumnNames().

I tried querying the derby systables:

The SYS.SYSTABLES table contains REFERENCEID, COLUMNAME, COLUMNUMBER, ...

COLUMNAME is what I'm searching for. But I see no possibility to join this table with SYS.SYSTABLES or any other table.


回答1:


You can join systables and syscolumns with TABLEID = REFERENCEID

select TABLENAME,COLUMNNAME, t.* 
FROM sys.systables t, sys.syscolumns 
WHERE TABLEID = REFERENCEID and tablename = 'SYSCOLUMNS'

 TABLENAME  COLUMNNAME         REFERENCEID                          COLUMNNAME         COLUMNNUMBER COLUMNDATATYPE                                   COLUMNDEFAULT COLUMNDEFAULTID AUTOINCREMENTVALUE AUTOINCREMENTSTART AUTOINCREMENTINC
 ---------- ------------------ ------------------------------------ ------------------ ------------ ------------------------------------------------ ------------- --------------- ------------------ ------------------ ----------------
 SYSCOLUMNS AUTOINCREMENTINC   8000001e-00d0-fd77-3ed8-000a0a0b1900 AUTOINCREMENTINC              9 BIGINT                                           NULL          NULL                          NULL               NULL             NULL
 SYSCOLUMNS AUTOINCREMENTSTART 8000001e-00d0-fd77-3ed8-000a0a0b1900 AUTOINCREMENTSTART            8 BIGINT                                           NULL          NULL                          NULL               NULL             NULL
 SYSCOLUMNS AUTOINCREMENTVALUE 8000001e-00d0-fd77-3ed8-000a0a0b1900 AUTOINCREMENTVALUE            7 BIGINT                                           NULL          NULL                          NULL               NULL             NULL
 SYSCOLUMNS COLUMNDATATYPE     8000001e-00d0-fd77-3ed8-000a0a0b1900 COLUMNDATATYPE                4 org.apache.derby.catalog.TypeDescriptor NOT NULL NULL          NULL                          NULL               NULL             NULL
 SYSCOLUMNS COLUMNDEFAULT      8000001e-00d0-fd77-3ed8-000a0a0b1900 COLUMNDEFAULT                 5 java.io.Serializable                             NULL          NULL                          NULL               NULL             NULL
 SYSCOLUMNS COLUMNDEFAULTID    8000001e-00d0-fd77-3ed8-000a0a0b1900 COLUMNDEFAULTID               6 CHAR(36)                                         NULL          NULL                          NULL               NULL             NULL
 SYSCOLUMNS COLUMNNAME         8000001e-00d0-fd77-3ed8-000a0a0b1900 COLUMNNAME                    2 VARCHAR(128) NOT NULL                            NULL          NULL                          NULL               NULL             NULL
 SYSCOLUMNS COLUMNNUMBER       8000001e-00d0-fd77-3ed8-000a0a0b1900 COLUMNNUMBER                  3 INTEGER NOT NULL                                 NULL          NULL                          NULL               NULL             NULL
 SYSCOLUMNS REFERENCEID        8000001e-00d0-fd77-3ed8-000a0a0b1900 REFERENCEID                   1 CHAR(36) NOT NULL                                NULL          NULL                          NULL               NULL             NULL



回答2:


Use DatabaseMetaData.getColumns()




回答3:


public static String[] retriveColumns(String tablename) throws SQLException
    {
        rs = st.executeQuery("SELECT * FROM " + tablename);
        rsmd = rs.getMetaData();
        int numberOfColumns = rsmd.getColumnCount();
        String names[];
        names = new String[numberOfColumns];
        for(int i=1; i<numberOfColumns; i++)
            {    
             names[i-1] = rsmd.getColumnName(i);
             System.out.println(names[i-1]);
            }
        return names;
   }


来源:https://stackoverflow.com/questions/8521123/apache-derby-retrieve-column-names-for-an-empty-table

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!