Java 我可以从联接选择结果集元数据中获取表名吗

Java 我可以从联接选择结果集元数据中获取表名吗,java,jdbc,metadata,Java,Jdbc,Metadata,下面是我试图从Resultset检索表名的代码 ResultSet rs = stmt.executeQuery("select * from product"); ResultSetMetaData meta = rs.getMetaData(); int count = meta.getColumnCount(); for (int i=0; i<count; i++) { System.out.println(meta.getTableName(i)); } ResultSe

下面是我试图从Resultset检索表名的代码

ResultSet rs = stmt.executeQuery("select * from product");

ResultSetMetaData meta = rs.getMetaData();
int count = meta.getColumnCount();
for (int i=0; i<count; i++) {
  System.out.println(meta.getTableName(i));
}
ResultSet rs=stmt.executeQuery(“从产品中选择*);
ResultSetMetaData meta=rs.getMetaData();
int count=meta.getColumnCount();

对于(int i=0;i传递给getTableName()的列索引从1开始。将循环更改为:

for (int i=1; i<=count; i++) {
  System.out.println(meta.getTableName(i));
}

for(int i=1;i从ResultSetMetaData获取表名是大多数DBMS的JDBC驱动程序(Oracle、DB2等)所不需要的,因为在许多情况下,规范没有定义应该返回什么-例如,在视图(视图名或基表名)的情况下,存在别名(表别名或真实表名),采用多个或无参数的函数的结果等


因此,我担心无法为大多数DBMS获得您想要的,尤其是以独立于DBMS的方式。

创建语句时,请尝试如下设置滚动/并发类型:
conn.createStatement(ResultSet.TYPE\u SCROLL\u敏感,ResultSet.CONCUR\u只读)

某些驱动程序需要这些设置才能返回表名