2012-12-08 2 views
0

아래의 코드에 이상한 문제가 발생했습니다. if else 문없이 실행하면 정상적으로 작동하지만 다른 경우에는 jtable에 결과가 표시되지 않습니다. 내가 여기에 멍청한 뭔가가 있니?Java ResultSet SQL with

 try { 
     Class.forName(dbClass); 
     Connection con = DriverManager.getConnection (dbUrl,dbUsername, dbPassword); 
     Statement stmt = con.createStatement(); 

     String userQuery = "SELECT p_id AS 'Patient ID', forename AS 'Forename', surname AS 'Surname', address AS 'Address' FROM Patient WHERE surname LIKE '%"+s+"%'"; 
     ResultSet userResult = stmt.executeQuery(userQuery); 

     if(!userResult.next()) 
     { 
      JOptionPane.showMessageDialog(null, "No Results."); 
     { 
     else{ 
     ResultSetMetaData rsMetaData =userResult.getMetaData(); 
     DefaultTableModel dtm = new DefaultTableModel(); 
     int cols = rsMetaData.getColumnCount(); 
     Vector colName = new Vector(); 
     Vector dataRows = new Vector(); 

     for (int i=1; i<cols; i++){ 
     colName.addElement(rsMetaData.getColumnName(i)); 
     } 
     dtm.setColumnIdentifiers(colName); 

     while(userResult.next()){ 
      dataRows = new Vector(); 
      for(int j = 1; j<cols; j++){ 
       dataRows.addElement(userResult.getString(j)); 
      } 
      dtm.addRow(dataRows); 
     } 
     searchTable.setModel(dtm); 
     con.close(); 
     } 
    } //end try 

    catch(ClassNotFoundException e) { 
     JOptionPane.showMessageDialog(null, "Database Error."); 
     e.printStackTrace(); 
    } 

    catch(SQLException e) { 
     JOptionPane.showMessageDialog(null, "Database Error."); 
     e.printStackTrace(); 
    } 

GUI 용으로 netbeans를 사용하고 있습니다.

감사합니다.

답변

1

if/else 블록 외부에서 연결 개체 (con)를 닫아야합니다.

do { 
     dataRows = new Vector(); 
     for (int j = 1; j < cols; j++) { 
      dataRows.addElement(userResult.getString(j)); 
     } 
      dtm.addRow(dataRows); 
    } 
while (userResult.next()); 
+0

답장을 보내 주셔서 감사합니다. 여전히 작동하지 않습니다. 여기 방법의 샘플, 어떤 생각이 잘못 됐어? 실제로 열 머리글을 올바르게 표시하지만 셀에는 내용이 없습니다. 분명히 표시 할 내용이 있습니다. if/else 블록이 없으면 제대로 작동합니다. http://pastebin.com/RHYpGEAg – derpyderp

+0

@clear_skies : 내 업데이트 참조. – Thinhbk

0

마지막주십시오 : 루프 동안

옆의 userResult.next은()

당신은에 의해 동안()를 대체하여 문제를 해결할 수 있습니다 .. else 문 블록에 두 번 않습니다 불렀다 연결을 닫고 다른 리소스를 제거하는 것을 처리합니다.

+0

답장을 보내 주셔서 감사합니다. 아직 작동하지 않으며 finnally 블록이 포함되어 있습니다. 여기 방법의 샘플, 어떤 생각이 잘못 됐어? 실제로 열 머리글을 올바르게 표시하지만 셀에는 내용이 없습니다. 확실히 표시 할 내용이 있습니다. if/else 블록 pastebin.com/RHYpGEAg을 사용하지 않고도 정상적으로 작동합니다. – derpyderp