2014-02-13 1 views
0

미니 재고 관리 시스템을 만들고 있습니다. 이것은 내 데이터베이스의 송장 테이블입니다. 오래된 송장을 검색 할 때
INVOICE TABLE로드 된 데이터를 지우기 전에 테이블에 데이터를로드하는 방법은 무엇입니까?


열, itid (P), CUID (P) (P) INID 있으며, itname는, 수량, sprice는 총 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); 나는 단지 같은 결과를 얻습니다. 제발 도와주세요.
My 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; 
    } 
} 
+0

직면 한 문제를보다 명확하게 설명해주십시오. –

+0

나는 내 머리를 감싸려고 노력하고 있지만, 프로그램이해야 할 일을 절반 밖에 이해하지 못했고, 아마도 절반이 당신의 코드가 무엇을해야 하는지를 이해합니다. (설명이 아닌, 코드를 쳐다 봄으로써) –

+0

사실 .. 그녀는 테이블을 새로 고침 할 때 문제가 발생한다고 생각했다. –

답변

1

UI 양식을 지울 수있는 방법은 여러 가지가 있습니다. 가장 간단한 방법 중 하나는 빈/기본 인스턴스로 모델을 재설정하는 것입니다. 이것은 JTable, JTree, JListJComboBox에서 잘 작동합니다. ... 당신의 예제 코드를 기반으로

, 당신은

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); 

매번 열 정보를 재구성해야합니다.

+0

고마워요 ... – Dilini

+0

확실히 변경됩니다. P – MadProgrammer

+0

그게 무슨 뜻 이죠? – Dilini

0


모든 행을 제거하기 위해이 방법을 시도해보십시오

int count = yourTable.getRowCount(); 

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

를 내 의견으로는, 각 단계에서, 데이터는 그 메소드를 호출 갱신 될 수 있도록, 새로 고침 등의 방법을 만들 수 있습니다.

+1

간단히 새로운 DefaultTableModel을 만들 수도 있습니다 ... – MadProgrammer

+0

@MadProgrammer : 예, 그런 생각을하지 않았습니다. 스윙을 사용할 때 이렇게했습니다. –

+0

죄송합니다. 자리를 비 웠습니다.잠깐만 기다려주세요 – Dilini

관련 문제