2012-08-02 2 views
0

MySQL 데이터베이스에 연결하고 select 문을 사용하여 JTable을 통해 상태가 "O"인 행을 표시하는 Java 응용 프로그램이 있습니다. 선택한 행을 클릭하면 행의 세부 사항이 다른 GUI 양식으로 표시되도록 마우스 이벤트를 추가했습니다. 새 양식에서 마우스 이벤트가 발생하면 데이터베이스 테이블이 상태 "R"로 갱신됩니다. JTable의 원래 디스플레이로 돌아 가면 행이 더 이상 표시되지 않을 것으로 예상됩니다. 그러나 이전에 선택한 행이 여전히 JTable에 표시되고 업데이트 된 상태로 새로 고치려면 JTable에 대한 전체 프로그램을 종료해야합니다.데이터베이스 연결 새로 고침

테이블 상태는 "R"로 업데이트지고 각 양식에서 탐색 할 수

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

을 사용하고 있습니다. 디스플레이 GUI로 돌아 가면 변경된 상태를 사용하여 테이블을 업데이트 할 수 있도록 데이터베이스 연결을 새로 고치는 방법이 있습니까?

이 코드 사용하여 표시 :이 코드로 돌아가

public class ReceiveOrderedParts extends JFrame{ 
static Vector<Vector<String>> data = new Vector<Vector<String>>(); 
static JTable table; 
ReceiveOrderedParts(final String st) throws InterruptedException, SQLException{    
    super("Order Details Inquiry"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JPanel topPanel = new JPanel(); 

    getContentPane().add(topPanel, BorderLayout.PAGE_START); 

    Vector<String> headers = new Vector<String>(); 
    headers.add("Order Number"); 
    headers.add("Date");  
    headers.add("Part Number"); 
    headers.add("Part Name"); 
    headers.add("Application"); 
    headers.add("Quantity"); 
    headers.add("Total Cost"); 
    headers.add("Supplier");      
    headers.add("Country"); 

    getData(); 

    //this is the model which contain actual body of JTable 
    DefaultTableModel model = new DefaultTableModel(data, headers); 
    table = new JTable(model); 
    table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);  
    //table.enable(false); 
    table.addMouseListener(new ReceiveOrderedParts.MyMouseAdapter()); 
    boolean b = table.isCellEditable(WIDTH, WIDTH); 
    b = false; 

    header_size(); 

    JScrollPane scroll = new JScrollPane(table); 

    scroll.setHorizontalScrollBarPolicy(
      JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
    scroll.setVerticalScrollBarPolicy(
      JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 

    getContentPane().add(scroll, BorderLayout.PAGE_START); 

    pack(); 
    setResizable(false); 
    setVisible(true); 
    setSize(1000, 700); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 
public class MyMouseAdapter extends MouseAdapter { 

    public void mousePressed(MouseEvent e) {   
      int colIdx = table.columnAtPoint(e.getPoint());     
      int rowIdx = table.rowAtPoint(e.getPoint()); 
      Object obj = table.getModel().getValueAt(rowIdx, colIdx) ; 
       String order = obj.toString();     
      JOptionPane.showMessageDialog(null,"Receive Order "+ order + "?", "Success", 
         JOptionPane.INFORMATION_MESSAGE); 
        // return; 
     try { 
      SelectOrder seo = new SelectOrder(order); 
      seo.setVisible(true); 
      setVisible(false); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(ReceiveOrderedParts.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

} 

/** 
* Setting the particular Column Size in JTable 
*/ 
public static void header_size() { 
    TableColumn column = table.getColumnModel().getColumn(0); 
    column.setPreferredWidth(100); 

    column = table.getColumnModel().getColumn(1); 
    column.setPreferredWidth(100); 
} 

/** 
* Fetching Data From MySql Database and storing in a Vector of a Vector to 
* Display in JTable 
*/ 
private static void getData() throws SQLException { 
    // Enter Your MySQL Database Table name in below Select Query. 
    String str = "select order_number, Part_number, spare_desc, vehicle_app, qnty_ordered," 
      + "seller_name, total_purchases, country, order_date from order_details_table where status = 'O'"; 
    Connection cn = null; 
    ResultSet rs; 
    Statement st; 

    try { 
     // Change the database name, hosty name, 
     // port and password as per MySQL installed in your PC. 
     cn = DriverManager.getConnection("jdbc:mysql://" 
       + "localhost:3306/test", "root", "[email protected]"); 
     st = cn.createStatement(); 

     rs = st.executeQuery(str); 

     while (rs.next()) { 
      Vector<String> d = new Vector<String>(); 

      d.add(rs.getString("order_number")); 
      d.add(rs.getString("order_date"));     
      d.add(rs.getString("Part_number")); 
      d.add(rs.getString("spare_desc")); 
      d.add(rs.getString("vehicle_app")); 
      d.add(rs.getString("qnty_ordered")); 
      d.add(rs.getString("total_purchases")); 
      d.add(rs.getString("seller_name"));             
      d.add(rs.getString("country")); 

      d.add("\n\n\n\n\n\n\n"); 
      data.add(d); 

     } 
     cn.close(); 

    } catch (SQLException e) { 

     e.printStackTrace(); 

    } 
} 
} 

을;

Connection conn = null; 
String url = "jdbc:mysql://localhost:3306/"; 
String db = "test"; 
String driver = "com.mysql.jdbc.Driver"; 
Class.forName(driver); 
conn = DriverManager.getConnection(url + db, "user", "password"); 
Statement st = conn.createStatement(); 
String partno = tpart.getText(); 
String sparedesc = tdesc.getText(); 
String vapp = tapp.getText(); 
String qunty = tqnty.getText(); 
String costper = tcost.getText(); 
String country = tcountry.getText(); 
String retail = tretail.getText(); 
String store = tstore.getText(); 
String location = tlocation.getText(); 
String rdate = trdate.getText(); 
String storeit = "INSERT INTO Store_info_table (Part_number, spare_desc, vehicle_app, qnty_received, cost_per_unit" 
     + ", selling_price, country, store_name, store_location, recvd_date) " 
     + "VALUES ('" + partno + "', '" + sparedesc + "', '" + vapp + "', '" + qunty + "', '" + costper + "','" + retail + "','" + country + "','" + store + "','" + location + "','" + rdate + "')"; 
st.execute(storeit); 

String updateOrder = "UPDATE order_details_table set status = 'R' where order_number = '" + order + "'"; 
st.execute(updateOrder); 

JOptionPane.showMessageDialog(null,"Item Stored Successfully", "Success", 
     JOptionPane.INFORMATION_MESSAGE); 
conn.close(); 

ReceiveOrderedParts rop = new ReceiveOrderedParts(order); 
rop.invalidate(); 
rop.setVisible(true); 
setVisible(false);       

답변

1

이 상황을 처리하려면 observer pattern을 구현해야합니다. 따라서 새 양식의 데이터가 업데이트되면 알림이 전송되고 데이터베이스에서 새 값을 가져 와서 원본 테이블이 업데이트됩니다.

관련 문제