如何将数据加载到表清除加载的数据之前?

时间:2014-02-13 02:13:39

标签: java mysql swing

我正在制作迷你库存控制系统。这是我的数据库的发票表。
INVOICE TABLE


列是inid(p),itid(p),cuid(p),itname,qty,sprice,total,isdate,redate
使用发票ID(inid)搜索旧发票时,这是我的发票界面。我之前已经搜过了一个。每个数据集都正确地设置为文本字段和表。但问题是,当我在搜索另一张发票时,其他数据将正确设置,但表格不清晰,第二次搜索的数据也会在第一个搜索数据下设置到给定表格。
FIRST SEARCH

这是第二个搜索界面。
SECOND SEARCH 以下是我的搜索源代码。

JDBC db = new JDBC();
public boolean b;   

  public void selectFromDate(JComboBox combodate, JDateChooser isdate, JDateChooser redate,       DateSpinner retime, DateSpinner istime,
          JTable jtable1, JTextField txtCuid, JTextField txtCuName, JTextField txtCuAdd,
          JTextField txtCuTp, JTextField txtgtotal, JTextField txtAdvance, JTextField txtDue,
          JTextField txtInvoiceID, JTextField txtDamage, JTextField txtInvoiceTotal) {
      SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat formatter2 = new SimpleDateFormat("HH:mm:ss");
    try {
        ResultSet rs1 = db.getData("SELECT * FROM invoice WHERE isdate='" + combodate.getSelectedItem().toString() + "'");
        if (rs1.next()) {
            b = true;
            while (rs1.next()) {                    
                txtInvoiceID.setText((rs1.getString("inid")));
            Vector v = new Vector();
            DefaultTableModel dd = (DefaultTableModel) jtable1.getModel();
               dd.setRowCount(0);
            v.add(rs1.getInt("itid"));
            v.add(rs1.getString("itname"));
            v.add(rs1.getInt("qty"));
            v.add(rs1.getDouble("sprice"));
            v.add(rs1.getDouble("total"));
            dd.addRow(v);

            String maindate1 = rs1.getString("isdate");
            String date1 = maindate1.substring(0, 10);
            String time1 = maindate1.substring(11, 19);

            Date d1 = formatter1.parse(date1);
            Date t1 = formatter2.parse(time1);

            isdate.setDate(d1);
            istime.setValue(t1);

            String maindate2 = rs1.getString("redate");
            String date2 = maindate2.substring(0, 10);
            String time2 = maindate2.substring(11, 19);

            Date d = formatter1.parse(date2);
            Date t = formatter2.parse(time2);

            redate.setDate(d);
            retime.setValue(t);


            try {
                ResultSet rs2 = db.getData("SELECT * FROM customer WHERE cuid='" + rs1.getInt("cuid") + "'");
                while (rs2.next()) {
                    txtCuid.setText(String.valueOf(rs1.getInt("cuid")));
                    txtCuName.setText(rs2.getString("cuname"));
                    txtCuAdd.setText(rs2.getString("cuadd"));
                    txtCuTp.setText(rs2.getString("cutp"));

                    try {
                        ResultSet rs3 = db.getData("SELECT * FROM indetails WHERE inid='" + rs1.getInt("inid") + "'");
                        if (rs3.first()) {
                            txtgtotal.setText(String.valueOf(rs3.getDouble("gtotal")));
                            txtAdvance.setText(String.valueOf(rs3.getDouble("advance")));
                            txtDue.setText(String.valueOf(rs3.getDouble("due")));
                            try {
                                ResultSet rs4 = db.getData("SELECT * FROM infinal WHERE inid=" + rs1.getInt("inid") + "");
                                if (rs4.first()) {
                                    txtDamage.setText(String.valueOf(rs4.getDouble("dcost")));
                                    txtInvoiceTotal.setText(String.valueOf(rs4.getDouble("intotal")));

                                } else {
                                    JOptionPane.showMessageDialog(null, "Invoice is not finalised");
                                }
                            } catch (Exception e) {
                                JOptionPane.showMessageDialog(null, this.getClass().getName() + " " + "rs4" + e);
                            }
                        }
                    } catch (Exception e) {
                        JOptionPane.showMessageDialog(null, this.getClass().getName() + " " + "rs3" + e);
                    }
                }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, this.getClass().getName() + " " + "rs2" + e);
            }
            }

        } else {
            b = false;
            JOptionPane.showMessageDialog(null, this.getClass().getName() + " " + "rs1");
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, this.getClass().getName() + "rs1 " + " " + e);
    }
}
}


当我评论dd.setRowCount(0);我只得到相同的结果..请帮助我。
我的JDBC类代码。

package Model;

import static Model.JDBC.con;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JOptionPane;

public class JDBC {

String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost/cateringnew";
static Connection con;
//10.226.50.130

private void setCon() {
    try {
        Class.forName(driver);
        con = DriverManager.getConnection(url, "root", "");
    } catch (Exception ex) {
        JOptionPane.showMessageDialog(null, ex);
    }
}

private Connection getCon() throws Exception {
    if (con == null) {
        setCon();
        System.out.println("setCon");
    }
    System.out.println("getCon");
    return con;
}


  public void putData(String sql) {
    try {
        PreparedStatement state = getCon().prepareStatement(sql);
        state.executeUpdate();
        System.out.println("putDate");

    } catch (Exception ex) {
        JOptionPane.showMessageDialog(null, ex);
    }
}

public ResultSet getData(String sql) throws Exception {

    Statement state = getCon().createStatement();
    ResultSet rset = state.executeQuery(sql);
    System.out.println("getData");
    return rset;
  }
 }

2 个答案:

答案 0 :(得分:1)

您可以通过多种方式清除UI表单,其中最简单的方法是使用空/默认实例重置模型。这适用于JTableJTreeJListJComboBox

根据您的示例代码,您可以执行类似...

的操作
DefaultTableModel dd = new DefaultTableModel();
// Set the columns for the table model...
jtable1.setModel(dd);
while (rs1.next()) {                    
    txtInvoiceID.setText((rs1.getString("inid")));
    Vector v = new Vector();
    v.add(rs1.getInt("itid"));
    v.add(rs1.getString("itname"));
    v.add(rs1.getInt("qty"));
    v.add(rs1.getDouble("sprice"));
    v.add(rs1.getDouble("total"));
    dd.addRow(v);

或者你可以做点像......

DefaultTableModel dd = (DefaultTableModel) jtable1.getModel();
dd.setRowCount(0);
while (rs1.next()) {                    
    txtInvoiceID.setText((rs1.getString("inid")));
    Vector v = new Vector();
    v.add(rs1.getInt("itid"));
    v.add(rs1.getString("itname"));
    v.add(rs1.getInt("qty"));
    v.add(rs1.getDouble("sprice"));
    v.add(rs1.getDouble("total"));
    dd.addRow(v);

哪个更简单,因为您不需要每次重建列信息。

答案 1 :(得分:0)

尝试使用此方法删除所有行:

    int count = yourTable.getRowCount();

    for(int i = count-1;i>=0;i--){
        DefaultTableModel dft = (DefaultTableModel)yourTable.getModel();
        dft.removeRow(i);
    }

在我看来,创建一个方法作为刷新,以便在每个阶段,数据将刷新调用该方法。