在JDBC中没有设置元数据,如果结果集为空,那么我就无法执行getColumnNames()。
我试过查询德比systables:
SYS.SYSTABLES
表包含REFERENCEID
,COLUMNAME
,COLUMNUMBER
,...
COLUMNAME
。但我认为没有可能将此表与SYS.SYSTABLES或任何其他表连接。
答案 0 :(得分:3)
您可以使用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
答案 1 :(得分:2)
答案 2 :(得分:0)
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;
}