从jdbc的元数据对象获取完整的列名
我正在处理一个结果集,其中返回的列数有所不同,因此我需要知道存在哪些列。我发现我可以像这样提取返回的列名:
ResultSetMetaData meta = rs.getMetaData();
ArrayList<String> columns = new ArrayList<String>();
for (int i = 0; i < meta.getColumnCount(); i++) {
columns.add(meta.getColumnLabel(i+1));
}
但是,这并没有给我 SQL 中定义的完整列名。 IE。
select events.id, events.name from events;
显示为“id,name”而不是“events.id,events.name”,这在连接表并希望返回的列名有所不同时非常糟糕。
I'm processing a resultset where the number of returned columns vary and thus I need to know which columns are present. I found that I can extract the returned column names like this:
ResultSetMetaData meta = rs.getMetaData();
ArrayList<String> columns = new ArrayList<String>();
for (int i = 0; i < meta.getColumnCount(); i++) {
columns.add(meta.getColumnLabel(i+1));
}
This however does not give me the full column name defined in my SQL. Ie.
select events.id, events.name from events;
shows up as "id, name" and not "events.id, events.name" which is pretty bad when joining tables and wanting to differ on the column names returned.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
答案是:您无法从 select 语句中检索表别名。但是,您可以检索列的基础表的名称,因此您应该能够使用 ResultSetMetaData 中的 getTable(int) 检索此名称,因为您没有使用表别名,而是使用实际表。
The answer is: you can't retrieve the table alias from the select statement. You can however retrieve the name of the underlying table of a column, so you should be able to retrieve this using getTable(int) from ResultSetMetaData as you are not using table aliases, but are using the actual tables.
连接表时必须指定别名。有两种方法 -
getColumnName()
- 返回列名称和getColumnLabel()
- 返回列标签(别名)。如果未指定别名,则getColumnLabel()
返回的值与getColumnName()
返回的值相同。You have to specify an alias while joining tables. There are two methods -
getColumnName()
- returns a column name andgetColumnLabel()
- returns a column label (alias). If an alias is not specifed then thegetColumnLabel()
returns same value as the value returned by thegetColumnName()
.