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

时间:2010-05-06 03:16:50

标签: 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));
}

但是它返回空,没有提到它是一个连接选择结果集。 是否还有其他方法可以从reusltset元数据中检索表名?

3 个答案:

答案 0 :(得分:0)

获取ResultSetMetaData中的表名是大多数DBMS的JDBC驱动程序(Oracle,DB2,...)不会导致的,因为在许多情况下规范没有定义应返回的内容 - 例如在视图(视图名或基表名)的情况下,存在别名(表别名或实际表名),带有多个参数或没有参数的函数的结果等。

所以我担心没有办法得到你想要的大多数DBMS,最不重要的是以DBMS独立的方式。

答案 1 :(得分:0)

创建语句时,请尝试设置滚动/并发类型,如下所示: conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY)

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

See here for details

答案 2 :(得分:-1)

传递给getTableName()的列索引从1开始。将循环更改为:

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