2013-01-31 26 views
1

http://codepaste.net/ujhdq2添加行的DefaultTableModel

private Connection Econn; 
    private DefaultTableModel examTable = new DefaultTableModel(); 
    public StudentInfoFrame(int eid) { 
     initComponents(); 
     this.e_id = eid; 
     try 
     { 
      jTable2.getParent().setBackground(Color.black); 
      SimpleDataSource.init(); 
      Econn = SimpleDataSource.getConnection(); 
      jTable2.setModel(examTable); 
      retrieveExams(); 
     } 
     catch(SQLException | ClassNotFoundException e) 
     { 
      System.out.println(e); 
     } 
    } 

private void retrieveExams() 
    { 
     try 
     { 
      Statement stat = Econn.createStatement(); 
      String query = "SELECT date, name,forename,surname,status,Exam "+ 
      "FROM studentexam sx INNER JOIN Exam e ON sx.ex_id = e.ex_id " + 
      "INNER JOIN employee em ON e.head = em.e_id WHERE st_id = "+this.e_id; 
      ResultSet result = stat.executeQuery(query); 
      if(result.first()) 
      { 
      while(result.next()) 
      { 
       String headname = result.getString("forename")+" "+result.getString("surname"); 
       String name = result.getString("name"); 
       int status = result.getInt("status"); 
       String pres; 
       if(status == 1) 
       { 
        pres = "Yes"; 
       } 
       else 
       { 
        pres = "No"; 
       } 
       String exam; 
       if(result.getInt("Exam") == 1) 
       { 
        exam = "Yes"; 
       } 
       else 
       { 
        exam = "No"; 
       } 
       Date date = result.getDate("date"); 
       int day = date.getDay(); 
       int year = date.getYear()+1900; 
       int month = date.getMonth()+1; 
       String datum = year+"-"+month+"-"+day; 
       int row = examTable.getRowCount()+1; 
       examTable.insertRow(row, new Object[] { name,headname,datum, exam,pres }); 
      } 
      } 

     } 

這給了我這個錯誤:在線程

例外 「AWT-EventQueue的 - 0」 java.lang.ArrayIndexOutOfBoundsException:1> 0

任何理念?

+0

在這裏寫你的代碼,不要鏈接它。 – Simulant

回答

3

DefaultTableModel#insertRow插入一個給定的索引的條目。這是不可能插入模型的當前行以外的項數

更換

examTable.insertRow(row, new Object[] { name,headname,datum, exam,pres }); 

examTable.addRow(new Object[] { name,headname,datum, exam,pres }); 

看看這些行:

if (result.first()) { 
    while(result.next()) { 

SQL建議您希望從您的帳戶中返回單個記錄查詢。但是,通過調用ResultSet#first,光標將超過第一個可能的行,所以您的while循環從不輸入。相反,你可以用替換這些行:

if (result.next()) { 

從這個

除此之外,使用PreparedStatement而非Statement防止SQL Injection攻擊。

+0

不知何故,它不給我任何結果。沒有行被添加。另外我的表格在運行應用程序時不會顯示。 – Kraishan

+0

查看更新。現在顯示的表格問題可能是佈局問題,但我不能評論這一點,因爲您沒有在代碼中添加代碼。 – Reimeus

+0

佈局是固定的,但我仍然看不到任何條目(是的,查詢實際上給出了條目)。我按照你的指示正確。 – Kraishan

3

更換

int row = examTable.getRowCount()+1; 

與一切都是從零開始的

int row = examTable.getRowCount(); 

指數在Java中

0

舊線程,但無人接聽。我爲此註冊了。
每次更新(添加,插入,刪除),你的表型號:

examTable.addRow(new Object[] { name,headname,datum, exam,pres }); 

您需要刷新表的更新模式:

jTable2.setModel(examTable); 

這並不在我的經驗自動發生。