2013-01-31 25 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); 

这并不在我的经验自动发生。