考虑一个查询,例如从a a,B b,C c中选择a.apple,b.mango,c.orange,其中......(某些条件)
这里我只需要根据查询获取列名。
苹果 芒果 橙色。
我们有一个查询构建器,其中最终用户使用它创建/生成任何类型的查询,我的职责是从上面的查询中仅选择列名称以进行进一步的操作。
我如何通过java代码或查询实现这一目标?
我的db是sql server 2005。
答案 0 :(得分:1)
如果您只需要显示已知的列名,只需将它们(列名)直接放入SELECT列表中即可:
SELECT apple AS apple ,mango AS mango,orange AS orange
否则您可以查询SQL Server的信息架构服务表:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME=OBJECT_NAME(OBJECT_ID('a')) OR TABLE_NAME=OBJECT_NAME(OBJECT_ID('b')) OR TABLE_NAME=OBJECT_NAME(OBJECT_ID('c'))
使用Java和原始查询,您可以使用ResultSetMetaData object:
读取列名ResultSetMetaData rsmd = rs.getMetaData();
String apple = rsmd.getColumnName(1); //Column apple
String mango = rsmd.getColumnName(2);
答案 1 :(得分:1)
获取ResultSetMetaData java接口
PreparedStatement ps=con.prepareStatement("select * from your_table_name");
ResultSet rs=ps.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();
System.out.println("Total columns: "+rsmd.getColumnCount());
System.out.println("Column Name of 1st column: "+rsmd.getColumnName(1));
con.close();
答案 2 :(得分:0)
如果您使用的是eclipseLink,则可以根据此链接获取列名称
答案 3 :(得分:0)
我找到了一个解决方案,它工作正常。感谢大家花了宝贵的时间。
我们可以通过两种方式实现这一目标。
列表> lsMapStringObj = new ArrayList>();
for(Map myMap:lsMapStringObj)
{
for(Map.Entry entry:myMap.entrySet())
{
lsRsult.add(entry.getKey());
}
}
但是如果查询返回> 0行然后我才能获取列名。
这给出了我期望的解决方案(> = 0行)
PreparedStatement ps = con.prepareStatement(sQuery);
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int numColumns = rsmd.getColumnCount();
for(int i = 1; i< = numColumns; ++ i)
{
lsResult.add(rsmd.getColumnName(I));
}
返回lsResult;
终于明白了,希望对别人有所帮助。享受编程...... !!!
答案 4 :(得分:0)
一个更简单的解决方案是使用String.split标记列名。它将返回一个columnNames数组。
Orders
.Join(OrderRows, o => o.Id, r => r.OrderId, (o,r) => new {o,r})
.GroupBy(g => new {g.o.Id, g.r.Price})
.Select(group => new {
order_amount = group.Count(),
Total_ordersum = group.Key.Price,
});´
输出:
String query = "select a.apple,b.mango,c.orange from A a,B b,C c where ... (Some conditions)";
String[] columnNames= query.split(" [fF][rR][oO][mM] ")[0]
.split("[ ]*[sS][eE][lL][eE][cC][tT] ")[1]
.split("[ ]*,[ ]*");
for(int i=0; i<columnNames.length;i++){
System.out.println(i+".)"+columnNames[i]);
}