2013-08-19 3 views
-1

рассмотрим запрос типа выберите a.apple, b.mango, c.orange из А, В, С Ь С, где ... (Некоторые условия)Получение имен столбцов из запроса

здесь я должен принести только имена столбцов на основе запроса.

яблоко манго orange.

У нас есть построитель запросов, где конечный пользователь создает/генерирует любой тип запроса, используя это, моя обязанность - выбирать только имена столбцов из запроса, как указано выше для моих дальнейших операций.

Как я могу достичь этого, используя java-код или запрос?

мой дб SQL Server 2005.

+0

Я нашел ответ, и я отправлю его в ближайшее время. (Из-за проблемы с репутацией) – user2677772

ответ

0

если вы используете EclipseLink вы можете получить имена столбцов, как в этой ссылке

JPA/EclipseLink - Retrieve Columns Names

+0

[Как ответить] (http://stackoverflow.com/questions/how-to-answer): ** Предоставить контекст для ссылок ** - Ссылка на потенциальное решение всегда приветствуется, но добавьте контекст вокруг ссылки, чтобы ваши друзья-пользователи имели представление о том, что это такое и почему оно есть. Всегда указывайте наиболее значимую часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме. – BackSlash

+0

Спасибо за ваш ценный ответ. – user2677772

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 объект:

ResultSetMetaData rsmd = rs.getMetaData(); 
String apple = rsmd.getColumnName(1); //Column apple 
String mango = rsmd.getColumnName(2); 
+0

Спасибо за ваш ценный ответ. Это действительно помогло мне. – user2677772

1

, чтобы получить Java интерфейс ResultSetMetaData

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(); 
+0

Спасибо за ваш ценный ответ. Это действительно помогло мне. – user2677772

0

Я нашел решение для этого, и он отлично работает. Спасибо всем, что потратили свое драгоценное время.

Мы можем достичь этого двумя способами.

  1. Через карту. ex:

Список> lsMapStringObj = new ArrayList>();
для (Карта MyMap: lsMapStringObj)
{
для (Map.Entry запись: myMap.entrySet())
{
lsRsult.add (entry.getKey());
}
}

Но вот если запрос возвращает> 0 строк, то только я могу принести имена столбцов.

  1. Это дает решение, как я ожидал (> = 0 строк)

    PreparedStatement пс = con.prepareStatement (sQuery);
    ResultSet rs = ps.ExecuteQuery();
    ResultSetMetaData rsmd = rs.getMetaData();
    int numColumns = rsmd.getColumnCount();
    для (INT = 1; я < = numColumns; ++ я)
    {
    lsResult.add (rsmd.getColumnName (я));
    }
    return lsResult;

Наконец-то, надеюсь, это поможет другим. Наслаждайтесь программированием ... !!!

0

Одним из простейших решений является токенизация имен столбцов с помощью String.split. Он вернет массив имен столбцов.

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]); 
    } 

Выход:

{a.apple,b.mango,c.orange} //String array 
//Sysout  
1.)a.apple   
2.)b.mango   
3.)c.orange