在2个表

时间:2015-06-19 12:06:59

标签: java sql database sybase resultset

我希望使用ResultSetMetaDataResultSet从2个表中获取列名,然后获取它们的值。假设表myTable有列x,y和z。我做了

 Select * from table myTable A,myTable B where A.x = B.y

我想在我的代码中使用B.z的值。

ResultSetMetaData会将列列为x y z x y z,那么如何区分z的值与别名A和B?

我需要在查询中使用*,因为它可以提高我的性能。所以我不能在那里提到列名。有没有什么办法可以使用ResultSet的列名来获取列B.z的值?我的意思是ResultSetMetaData有没有办法将列列为A.x,A.y,A.z,B.x,B.y和B.z?

2 个答案:

答案 0 :(得分:1)

看起来更像JDBC ResultSet get columns with table alias

使用rs.getMetaData()。getTableName(colid)提供每列的表名,你必须生成自己的hashmap,其key作为tablename,value作为列名列表。

答案 1 :(得分:0)

如果您不能或不想指定列名(带别名),则需要按索引检索值,而不是按列标签检索。 ResultSet API doc明确说:

  

如果使用列名称调用getter方法并且多个列具有相同名称,则将返回第一个匹配列的值。列名选项设计用于在生成结果集的SQL查询中使用列名时使用。 对于未在查询中明确命名的列,最好使用列号。如果使用列名,程序员应注意保证它们唯一引用预期的列,这可以确保使用SQL AS子句。

(强调我的)

如果要区分列,则可以使用ResultSetMetaData.getTableName,但它不会帮助您进行检索(除了查找要使用的“正确”索引)。请注意,并非所有数据库都支持提供表名。