使用两个数据库表JDBC中的详细信息填充JTable

时间:2016-03-21 14:32:18

标签: java database swing jdbc netbeans

我在这里看了几个视频和问题,但我找不到我想要的东西。我是一个编程菜鸟(使用Derby数据库在Netbeans上用Java编程)所以请温柔。我有一个数据库,里面有2个表。 StudentScores和StudentDetails。

StudentDetails有NAMEID和STUDENTNAME列。

StudentScores具有NAMEID,SCOREID,DATETAKEN和SCORE列。

我想在我的程序中有一个JTable,它显示第一个数据库中的NAME列和第二个表中的DATETAKEN和SCORE。 我该怎么做?我只找到了有关如何使用一个数据库表中的所有详细信息填充JTable的教程。

我还希望用户能够在组合框中选择其名称时查看学生的所有记录(在JTable中)。我知道我必须在组合框和QUERY中获取名称的ID吗?

我找到了这个 http://1bestcsharp.blogspot.co.uk/2015/06/java-mysql-populate-jtable-Depending-JCombobox-Selected-Value.html

但我感到困惑,因为正在创建多个类。 我是否必须创建多个类,或者我是否可以在同一个JFrame表单中完成所有操作?

3 个答案:

答案 0 :(得分:0)

试试这个:

import java.awt.Dimension;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class Main extends JFrame {
  private JTable m_simpleTable;

  private SimpleTableModel m_simpleTableModel;

  public Main() {

    m_simpleTableModel = new SimpleTableModel(getData());
    m_simpleTable = new JTable(m_simpleTableModel);
    JScrollPane scrollPane = new JScrollPane(m_simpleTable);
    getContentPane().add(scrollPane);
  }

  public Vector getData(){
      Vector dummyMacData = new Vector(10, 10);
        dummyMacData.addElement(new Data(new Integer(100), "ABC", "11/12/2016","A+", "E"));
        dummyMacData.addElement(new Data(new Integer(105), "XYZ", "20/01/2015","B-", "E"));
        return dummyMacData;
  }

  public static void main(String[] arg) {
    Main m = new Main();

    m.setVisible(true);
    m.setSize(new Dimension(600, 300));
    m.validate();
  }

  class SimpleTableModel extends AbstractTableModel {
    public String[] m_colNames = { "Student Id", "Name", "Date","Score", "" };

    public Class[] m_colTypes = { Integer.class, String.class, String.class, String.class,
        String.class };

    Vector m_macDataVector;

    public SimpleTableModel(Vector macDataVector) {
      super();
      m_macDataVector = macDataVector;
    }
    public int getColumnCount() {
      return m_colNames.length;
    }
    public int getRowCount() {
      return m_macDataVector.size();
    }
    public void setValueAt(Object value, int row, int col) {
      Data macData = (Data) (m_macDataVector.elementAt(row));

      switch (col) {
      case 0:
        macData.setStudentId((Integer) value);
        break;
      case 1:
        macData.setName((String) value);
        break;
      case 2:
        macData.setDate((String) value);
        break;
      case 3:
        macData.setScore((String) value);
        break;
      case 4:
        //macData.setE((String) value);
        break;
      }
    }

    public String getColumnName(int col) {
      return m_colNames[col];
    }

    public Class getColumnClass(int col) {
      return m_colTypes[col];
    }
    public Object getValueAt(int row, int col) {
      Data macData = (Data) (m_macDataVector.elementAt(row));

      switch (col) {
      case 0:
        return macData.getStudentId();
      case 1:
        return macData.getName();
      case 2:
        return macData.getDate();
      case 3:
        return macData.getScore();
      case 4:
        return null;//macData.getE();
      }

      return new String();
    }
  }

}

class Data {
  private Integer studentId;

  private String name;

  private String date;

  private String score;

  private String e;

  public Data() {
  }

  public Data(Integer aa, String bb, String cc, String dd, String ee) {
      studentId = aa;
      name = bb;
      date = cc;
      score = dd;
    e = ee;
  }

public Integer getStudentId() {
    return studentId;
}

public void setStudentId(Integer studentId) {
    this.studentId = studentId;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public String getScore() {
    return score;
}

public void setScore(String score) {
    this.score = score;
}



}

答案 1 :(得分:0)

请在下面的链接中查看我的回答。你的问题几乎一样。希望这会有所帮助。

How to bring all data of table in JTable and insert it into Database

答案 2 :(得分:0)

这样做......应该可以正常工作

Select 
  sd.NameID,
  sd.StudentsName,
  sm.DATETAKEN,
  sm.Score 
from 
  (firsttablename) sd,
  (secondtablename) sm 
where 
  sd.NameId = sm.NameId 
  and sd.NameID = (nameid you want to display data)

但是在这里你必须将nameid作为第二个表中的外键。