我在netbeans中使用jTable。选择组合框后,如果我选择员工ID 1,则显示jTable中emp 1的所有数据。但是下次当我选择emmployee id时,jTable会显示emp id 1的单个值和empid 2的所有其他值。 我的代码如下:
Connect c = new Connect();//connection to database
con = (Connection) c.getConnection();
st = (Statement)con.createStatement();
String ddate = (String)text.getSelectedItem();
System.out.println("id " +ddate);
rs = st.executeQuery("select e.employee_id,e.`first_name`, i.outtime, i.outtime_date from tbl_employee e,tbl_outtime i where e.employee_id=i.outtime_emp_id and i.`outtime_date` LIKE '%/"+month2+"/"+year1+"'and outtime_emp_id="+ddate);
while(rs.next())
{
String dat1=rs.getString("outtime_date");
String e1=rs.getString("employee_id");
System.out.println(e1);
st33=(Statement) con.createStatement();
rs33=st33.executeQuery("select i.intime, i.intime_date from tbl_employee e,tbl_intime
i where e.employee_id=i.intime_emp_id and i.`intime_date`='"+dat1+"' and
i.intime_emp_id="+e1);
if(rs33.next())
{
int emp=rs.getInt("employee_id");
System.out.println(emp);
String name=rs.getString("first_name");
String dept=rs33.getString("intime");
String desig=rs.getString("outtime");
String join=rs33.getString("intime_date");
jTable1.setValueAt(emp, cnt, 0);
jTable1.setValueAt(name, cnt, 1);
jTable1.setValueAt(dept, cnt, 2);
jTable1.setValueAt(desig, cnt, 3);
jTable1.setValueAt(join, cnt, 4);
cnt=cnt+1;
}
}
如果有人知道,请告诉我解决方案。
答案 0 :(得分:3)
阅读有关JTable
JTable
视图的所有数据都存储在XxxTableModel
have to clear XxxTableModel,并将JDBC
中的新行添加到XxxTableModel
答案 1 :(得分:1)
答案 2 :(得分:1)
与所有其他Swing组件一样,表由两部分组成:视图部分(JTable
)和模型部分(TableModel
)。当模型通过抛出事件指示它已被更改时,视图会更新。有关详细信息,请参阅table tutorial。
因此,对于您的用例,您可以调整现有的TableModel
或创建一个新的TableModel
。我个人会选择创建一个新的,因为你正在使用数据库。
请注意,只应在Event Dispatch Thread上访问和修改Swing组件,并且不应在此线程上执行长时间运行的任务(如查询数据库)(请参阅Swing concurrency tutorial)。这就是为什么我建议创建一个新的SwingWorker
。您可以在用于查询数据库的工作线程上创建此模型,并在Event Dispatch Thread上一次性替换模型。 {{1}}类最适合这个。