2014-09-27 3 views
0

Eclipse를 사용하여 만든 JTable을 Vector 객체를 사용하여 테이블에 채 웁니다. jtable을 변경 한 후에 업데이트 할 데이터베이스 (내 jtable에 데이터를 제공)를 원합니다. 나는 그것을 어떻게 할 수 있는지 정말로 모른다. 몇 가지 제안?JTable에서 데이터를 업데이트하는 방법은 무엇입니까? (코드 포함)

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.HeadlessException; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import java.sql.Statement; 
import java.util.Vector; 
import java.util.logging.Level; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingWorker; 
import javax.swing.WindowConstants; 
import javax.swing.table.DefaultTableModel; 

public class provemain2 { 



public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new provemain2(); 
      } 
     }); 
    } 

    private final JButton button; 
    private final JTable table; 
    private final DefaultTableModel tableModel = new DefaultTableModel(); 

    public provemain2() throws HeadlessException { 

     JFrame one =new JFrame(); 

     one.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     one.setVisible(true); 

     table = new JTable(tableModel); 
     one.add(new JScrollPane(table), BorderLayout.CENTER); 

     button = new JButton("Load Data"); 
     button.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       new SwingWorker<Void, Void>() { 
        @Override 
        protected Void doInBackground() throws Exception { 
         loadData(); 
         return null; 
        } 
       }.execute(); 
      } 
     }); 
     one.add(button, BorderLayout.PAGE_START); 

     one.setSize(640, 480); 
    } 

    private void loadData() { 
     //LOG.info("START loadData method"); 

     button.setEnabled(false); 

     try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root","psw"); 
       Statement stmt = conn.createStatement()) { 

      ResultSet rs = stmt.executeQuery("select * from Acquirenti"); 
      ResultSetMetaData metaData = rs.getMetaData(); 

      // Names of columns 
      Vector<String> columnNames = new Vector<String>(); 
      int columnCount = metaData.getColumnCount(); 
      for (int i = 1; i <= columnCount; i++) { 
       columnNames.add(metaData.getColumnName(i)); 
      } 

      // Data of the table 
      Vector<Vector<Object>> data = new Vector<Vector<Object>>(); 
      while (rs.next()) { 
       Vector<Object> vector = new Vector<Object>(); 
       for (int i = 1; i <= columnCount; i++) { 
        vector.add(rs.getObject(i)); 
       } 
       data.add(vector); 
      } 

      tableModel.setDataVector(data, columnNames); 
     } catch (Exception e) { 
      //LOG.log(Level.SEVERE, "Exception in Load Data", e); 
     } 
     button.setEnabled(true); 

     //LOG.info("END loadData method"); 
    } 

} 

답변

1

이 코드는 당신이 당신의 문제를 해결하는 데 도움이 될 수 있습니다,

Dbconnection obj=new Dbconnection(); 
     rs=obj.getAllworkers(); 
     Vector v1=new Vector(); 
     v1.addElement("ID"); 
     v1.addElement("NAME"); 
     v1.addElement("STATE"); 
     v1.addElement("MOB"); 
     Vector v3=new Vector(); 
     try{ 
     while(rs.next()) 
     { 
      Vector v2=new Vector(); 
      v2.addElement(rs.getString(8)); 
      v2.addElement(rs.getString(2)); 
      v2.addElement(rs.getString(6)); 
      v2.addElement(rs.getString(7)); 
     v3.add(v2); 
     } 
     }catch(Exception e){} 
     JTable wrkr_table=new JTable(v3, v1); 

     JScrollPane scp=new JScrollPane(wrkr_table); 
다음

8,2,6,7 쿼리에 따라 적절한 열 수 있습니다 나는 JTable의를 채우는 데이 코드를 사용

rs는 그런 실수 죄송 ResultSet 오브젝트

+0

입니다. – Anptk

+0

편집은 사과보다 낫습니다. 소음이 삭제되었습니다. :) –

+0

코드 OP가 더 게시 됨, DefaultTableModel을 사용하고 올바르게 문제가있는 EDT – mKorbel