我希望使用ResultSetMetaData
和ResultSet
从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?
答案 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
,但它不会帮助您进行检索(除了查找要使用的“正确”索引)。请注意,并非所有数据库都支持提供表名。