2010-04-01 54 views
2

我需要解析一堆列名到列索引(以便使用一些漂亮的ResultSetMetaData方法)。但是,我知道如何获得ResultSetMetaData对象的唯一方法是在某些ResultSet上调用getMetaData()如何获得等效ResultSetMetaData没有ResultSet

我遇到的问题是,抓取ResultSet会占用不必要的资源 - 我并不需要查询表中的数据,我只是想了解一些关于表的信息。

有没有人知道有什么办法来得到一个ResultSetMetaData对象没有得到一个ResultSet(从一个潜在的巨大表)首先?

回答

4

也许你可以使用

DatabaseMetaData databaseMetaData = connection.getMetaData(); 
databaseMetaData.getColumns(null, null, tableName, "%"); 

它返回一个每个表列。

在这种情况下,您将使用返回的ResultSet本身,而不是它的ResultSetMetaData

这种方法的一个优点是,它不会干扰数据库锁定和事务处理。

+0

^^^这!!!但是,有一点需要注意的是,我在HP上运行Sybase时遇到了这个问题。这是2001年你想到的。但总的来说,这是做到这一点的方法。 – 2010-04-02 16:08:41

+0

你是对的 - 看着这个方法清楚地表明它的工作原理更清晰。 – javanix 2010-04-05 15:34:45

2

假设你正在做一个select * from mytable你可以添加一个where子句,确保没有记录将被返回,并且ResultSet将是空的?

这样你仍然只是得到你感兴趣的表的元数据而不是整个数据库。

+0

是的,这也是我想到的。为了清晰起见,我最终使用了LIMIT 1子句而不是WHERE子句,但似乎两种方式都可行。 – javanix 2010-04-01 22:39:53

+3

然而,这有点冒险。只是使用'DatabaseMetaData'更加整洁。 – BalusC 2010-04-01 22:40:53

+0

WHERE 1 = 0可用于任何数据库。 – sproketboy 2012-05-12 10:34:42

0

另一种解决方案

SELECT * FROM MYTABLE极限0;

然后查询不获取任何数据。

相关问题