2014-05-12 1 views
0

나는 (데이터를 가져올 테이블이 사용자가 선택하는) 테이블에서 선택된 데이터를 가져 오는 프로젝트에서 작업하고 있습니다. 내가 선택한 테이블에서 데이터를 가져 오기 위해 다음 코드를 사용하고 있습니다 :데이터를 입력하기위한 테이블 전환 열

jTextArea1.setText(null); 
tableModel.setColumnCount(0); 
tableModel.setRowCount(0); 
try { 
    try { 
     Class.forName("java.sql.DriverManager"); 
     timeget(); 
     jTextArea4.append(now + ": " + "/ Driver name Detected successfully/\n \n"); 
    } catch (ClassNotFoundException e) { 
     timeget(); 
     jTextArea4.append(now + ": " + "/ Failed in finding Driver \n " + e.getMessage() + "/\n It is recommended that you DO NOT PROCEED ANY FURTHER \n \n"); 
     JOptionPane.showMessageDialog(null, e.getMessage()); 
    } 
    con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:" + GlobalParams.portvar + "/" + (String) jList1.getSelectedValue(), "" + GlobalParams.uservar, "" + GlobalParams.passvar); 
    Statement stmnt = (Statement) con.createStatement(); 
    String query1 = "Use " + GlobalParams.dbvar; 
    stmnt.executeQuery(query1); 
    String query2 = "desc " + (String) jList2.getSelectedValue(); 
    ResultSet rs = stmnt.executeQuery(query2); 
    while (rs.next()) { 
     fieldo = rs.getString("Field"); 
     jTextArea1.append(fieldo + "\n"); 
    } 
    tableModel.addColumn(jTextArea1.getText().substring(0, jTextArea1.getText().indexOf("\n"))); 
    Scanner scanner = new Scanner(jTextArea1.getText()); 
    timeget(); 
    jTextArea4.append(now + ": " + "/ Scanning Available feeds from table '" + (String) jList2.getSelectedValue() + "'/\n"); 
    timeget(); 
    jTextArea4.append(now + ": " + "/ Getting feeds from table '" + (String) jList2.getSelectedValue() + "'/\n \n"); 
    if (scanner.hasNextLine()) { 
     scanner.nextLine(); 
     while (scanner.hasNextLine()) { 

//I BELIEVE MY CODE STARTS TO GO SOMEWHERE WRONG HERE BELOW: 

      String line = scanner.nextLine(); 
      tableModel.addColumn(line); 
      Statement stmnt2 = (Statement) con.createStatement(); 
      String tdataget = "Select " + line + " from " + (String) jList2.getSelectedValue(); 
      ResultSet rs2 = stmnt2.executeQuery(tdataget); 
      while (rs2.next()) { 
       String field = rs2.getString(line); 
       tableModel.addRow(new Object[]{field}); 
      } 
      int end = jTextArea1.getLineEndOffset(0); 
      jTextArea1.replaceRange("", 0, end); 
     } 
    } 
} catch (SQLException e) { 
    if (!(e.getMessage().contains("You have an error in your SQL syntax"))) { 
     JOptionPane.showMessageDialog(this, e.getMessage()); 
    } 
} catch (BadLocationException ex) { 
    JOptionPane.showMessageDialog(this, ex.getMessage()); 
} 

은 (jList2 어디 테이블의 이름에서 가져이고 jList1은 데이터베이스 이름 포함)

문제는 예를 들어,입니다. MySQL은 테이블 내 프레임에서 this->

Col1 | Col2 | Col3 | Col4 | Col5 
--------------------------------------------------------- 
Data1 | Data2 | Data3 | Data4 | Data5 
Datab1 | Datab2 | Datab3 | Datab4 | Datab5 

처럼 보이는 경우, 테이블 그래서 누군가가 나에게 코드를 제안 해주십시오 수 this->

Col1 | Col2 | Col3 | Col4 | Col5 
--------------------------------------------------------- 
Data1 

Data2 

Data3 

Data4 

Data5 

Datab1 

Datab2 

Datab3 

Datab4 

Datab5 

처럼 나타납니다 "다음 열로 전환" 자바에서? 감사합니다.

+1

먼저 쿼리 당 하나의 열을 가져 오겠습니까? 또는 단일 쿼리에서 모든 열을 가져 오려면 어떻게해야합니까? 둘째,'tableModel.setValueAt (field, row, column);'는'tableModel.addRow()'보다 더 유용 할 수 있습니다. –

+0

누군가가 나에게 외부 리소스를 사용하고 싶다면 루프를 만들고 작동하는 것이 좋습니다. D – user3271166

답변

1
tableModel.addRow(new Object[]{field}); 

항상 하나의 값으로 배열을 포함하는 행을 추가하고 있습니다. 대신 행의 모든 ​​값을 포함하는 Array를 추가해야합니다.

보다 일반적인 접근 방법을 보려면 Table From Database에있는 TableFromDatabaseExample.java 코드를 확인하십시오.

+0

덕분에 나중에 도움이 될 것입니다. 이것은 진정한 쉬운 방법이었습니다. 기본적으로 아무 것도하지 않았으므로 3 개의 루프가 제거되었습니다. – user3271166

관련 문제