2014-02-06 5 views
-3

Это мой столмне нужна помощь, чтобы извлечь данные из базы данных

FirstName----LastName----City--------State 
Ram----------Padhan------Houston-----TX 
Ram----------Padhan------Washingtom--MI 
Ram----------Padhan------Alok--------BG 
Keiry--------Lading------Azan--------BL 
Keiry--------Lading------Aror--------BS 

Как я могу получать данные так, что мой выход будет:

FirstName: Ram--LastName: Padhan 
City: Houston--State:TX 
City:Washington--State:MI 
City:Alok--State:BG 
FirstName: Keiry--LastName: Lading 
City: Azan--State:BL 
City:Aror--State:BS 

Помимо получения значения каждой строки :

FirstName: Ram--LastName: Padhan 
City: Houston--State:TX 
FirstName: Ram--LastName: Padhan 
City:Washington--State:MI 

Вот что я сделал. Результат, который я получаю, - это только первая строка firstname и lastname, тогда как для столбцов состояния и города я получаю значение до конца строки.

public class Practise 
{ 
    public static void main(String[] args) 
    { 
     Connection conn = null; 
     Statement stmt = null; 

     try { 
      Class.forName("com.mysql.jdbc.Driver") ; 
      String url = "jdbc:mysql://localhost:3306/table_name"; 

      conn = DriverManager.getConnection(url,"root","root"); 

      stmt = (Statement) conn.createStatement(); 

      String sql = "SELECT First_Name ,Last_Name ,City_Name , State_Name, FROM table_name"; 

      ResultSet rs = stmt.executeQuery(sql); 

      while(rs.next()) 
      { 
       String first = rs.getString("First_Name"); 
       String last = rs.getString("Last_Name"); 
       System.out.print("First: " + first); 
       System.out.println("Last: " + last); 

       do 
       { 
        String city = rs.getString("City_Name"); 
        String state = rs.getString("State_Name"); 
        System.out.println("City: " + city); 
        System.out.println("State: " + state); 
        System.out.println(); 
       } while(rs.next()); 
      } 
      rs.close(); 
     } 
     catch(SQLException se) 
     { 
      se.printStackTrace(); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     finally { 
      try { 
       if (stmt != null) 
        conn.close(); 
      } 
      catch(SQLException se) 
      { } 
      try { 
       if (conn != null) 
        conn.close(); 
      } 
      catch(SQLException se) 
      { 
       se.printStackTrace(); 
      } 
     } 
    } 
} 
+2

Отформатируйте свой код, он не читается. Собственно отформатируйте весь свой вопрос. –

ответ

1

У вас есть while цикл вложен в другой while цикла.

Изменить его к этому:

while(rs.next()) 

{ 
String first = rs.getString("First_Name"); 

String last = rs.getString("Last_Name"); 

System.out.print("First: " + first); 

System.out.println("Last: " + last); 
String city = rs.getString("City_Name"); 

String state = rs.getString("State_Name"); 

System.out.println("City: " + city); 

System.out.println("State: " + state); 

System.out.println(); 
} 

Edit я понял ваш вопрос изначально. Это псевдо-код, как я не пробовал это, но вы должны будете использовать GROUP_CONCATfunction

SELECT First_Name ,Last_Name , group_concat("City:",City_Name , "--State:", State_Name separator "\n") as data FROM table_name group by First_Name, Last_Name 
+0

Я думаю, вы не поняли вопрос. Смотрите следующий вывод: «Как я могу получить данные, чтобы мой результат был« »в вопросе. – Dukeling

+1

@ Dukeling О, вы правы ... удивительно, что форматирование разметки делает ... –

+0

Как избавиться от второго цикла, я получаю значение по каждой строке. – user3277535

1

Рассмотрите возможность использования 2 таблицы. Один для человека, другой для города/штата. Сначала выберите людей, затем, когда вы повторяете, используйте ключ, чтобы посмотреть город/штат.

+0

Я не могу использовать две таблицы. Его часть моей работы. Мне нужно получить данные, используя одну таблицу. – user3277535

0
Person previousPerson = null; 
Person nextPerson = null; 
while(rs.next()) { 
    nextPerson = new Person(rs.getString("First_Name"), rs.getString("Last_Name")); 
    if(! nextPerson.equals(previousPerson)) { 
     previousPerson = nextPerson; 
     System.out.println(previousPerson); 
    } 
    City city = new City(rs.getString("City_Name"), rs.getString("State_Name")); 
    System.out.println(city); 
} 
Смежные вопросы