2013-12-09 2 views
0

이 프로그램은 사용자가 7 가지 선택 사항 중 하나를 선택할 수있는 대화 상자를 열 것입니다. 선택한 선택 사항에 따라 SQL 문을 사용하여 데이터베이스에서 데이터를 추출하여 화면에 인쇄합니다.방법을 사용하여 다음을 수행하려면 어떻게해야합니까?

내가 궁금해하는 것은 각각의 메서드에서 각각의 단계를 수행하고 매우 큰 Switch 문 대신 main()에서 호출하기를 원합니다. 나는 모든 방법에 대한 연결을 만들 필요없이 이것을하는 방법을 알아낼 것 같습니다. 여기

import javax.swing.*; 
import java.sql.*; 


public class PC_05__PopulationDatabase { 

public static void main(String[] args) throws SQLException { 
    final String DB_URL = "jdbc:derby:CityDB"; 

    // List of actions 
    String[] arr = new String[7]; 
    arr[0] = "1) Sort Cities by Population - ASCENDING ORDER"; 
    arr[1] = "2) Sort Cities by Population - DESCENDING ORDER"; 
    arr[2] = "3) Sort Cities by Name"; 
    arr[3] = "4) Get Total Population of ALL Cities"; 
    arr[4] = "5) Get Average Population of ALL Cities"; 
    arr[5] = "6) Get Highest Population"; 
    arr[6] = "7) Get Lowest Population"; 

    try { 
     // Open Connection 
     Connection conn = DriverManager.getConnection(DB_URL); 
     System.out.println("Connection created to Population Database."); 

     // Statement and Result 
     Statement stmt = conn.createStatement(); 
     String sqlStatement; 
     ResultSet result; 

     // Selection dialog 
     Object userAction = JOptionPane.showInputDialog(null, "Select an action: ", "Actions", JOptionPane.PLAIN_MESSAGE, null, arr, null); 
     String selection = userAction.toString(); 

     int choice = Integer.parseInt(selection); 

     // Selection Actions 
     switch(choice) { 
      case 0: 

       break; 
      case 1: 

       break; 
      case 2: 

       break; 
      case 3: 

       break; 
      case 4: 

       break; 
      case 5: 

       break; 
      case 6: 

       break; 
     } 


     sqlStatement = "SELECT Description FROM Coffee"; 
     result = stmt.executeQuery(sqlStatement); 


     // Close Connection 
     conn.close(); 
     System.out.println("Connection closed."); 
    } 
    catch(Exception ex) { 
     System.out.println("ERROR: " + ex.getMessage()); 
    } 

} 

public static void sortPopAscending() { 

} 

public static void sortPopDescending() { 

} 

public static void sortName() { 

} 

public static void totalPop() { 

} 

public static void avgPop() { 

} 

public static void highestPop() { 

} 

public static void lowestPop() { 

} 

} 

답변

1

내가 유사한 문제를 해결 한 방법은 다음과 같습니다

  • 만들기는 클래스의 인스턴스 변수가 될 Connection conn. 그것을 static으로 만들지 마십시오. 동시 접속이 여러 번 필요하다면 스스로 차버릴 것입니다.
  • 데이터베이스 연결 열기
  • 사용자가 원하는 작업을 수행하는 동안 : 사용자가 선택한 다음 해당 선택 항목에 적절한 SQL이있는 별도의 함수를 호출하게하십시오. 당신은 등
  • 데이터베이스 연결
+0

이 좀 더 구체적으로 할 수 닫고, 그것을 switch 문, 익명의 클래스가 밖으로 호출하는 기능을하는 정렬 할 무언가를 필요 해요? "Connection conn"을 인스턴스 변수로 만들었습니다. 이제 main()에서 연결을 다시 엽니 다. 이것이 어떤 차이가 있습니까? 또는 당신은 내가 모든 방법에서 연결을한다고 말하고 있습니까?하지만 끝나면 메인에서 닫습니다. 나는 혼란스러워. – codefl0w

+1

생각 나는 꽤 구체적이지만, 다시 한번'main()'에서 한 번만 연결을 열고, 필요한 많은 사용자 선택을 위해 그것을 사용하고 닫는다. 이 접근법의 장점은 불필요한 열림 및 닫음 호출을 할 필요가 없으므로 비용이 많이 듭니다. 단, Statement와 ResultSet 객체를 사용할 때마다 즉시 닫아야한다. –

+0

내 나쁜 사람, 상속에 익숙하지 않아서 메소드를 사용하겠다는 생각이 들었을 때 충돌이 났지만 인식 할 수있는 것과 혼란스러워하는 것은 메소드 내부에서 혼란 스러웠습니다. 편집 - 각 메서드 내에서 문 및 결과 집합을 닫습니다? 그냥 메인() 끝에서 한 번 닫으시겠습니까? – codefl0w

관련 문제