如何将数据插入mysql数据库,同步更新java中的JTable?

时间:2014-03-13 14:23:40

标签: java mysql sql database jtable

enter image description here

我在下表

中获取了上面的GUI JTable数据
CREATE TABLE store_room(
store_id int,
store_capacity int
);

当我向这个sql表插入新记录时,它必须立即同步更新jtable 任何人都可以告诉你该怎么做?

注意: - 问题不明确,我会解释一下

我的插入数据GUI是这样的 enter image description here

我的班级结构如下

我创建了一个java bean类来表示表的元组。

public class StoreRoom{
private int storeId;
private int storeCapacity;

    public int getSstoreId() {
        return storeId;
    }

    public void setStoreId(int storeId) {
        this.storeRoomId = storeId;
    }

// getter setter方法 //

}

表示表行为我创建一个名为StoreRoomData的类,如下所示

public class  StoreRoomData {

    public static void insert(StoreRoom bean){
     // some code to insert like below
String sql="INSERT INTO StoreRoom(store_id ,store_capacity )"+
                "values(?,?);";
    ResultSet keys=null;
    try (
            Connection conn = DBUtil.getConnection(DBType.MYSQL);
            PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
         ){
        stmt.setInt(1, bean.getSstoreId());  
        stmt.setInt(2, bean.getSstoreCapacity());  



        int affacted = stmt.executeUpdate();
}

}

在一个表单中我创建一个bean对象并调用setMethods设置为bean对象的所有GUI输入并将其传递给insert方法,该方法将StoreRoomData类作为beleow

StoreRoom bean = new StoreRoom();

    bean.setStoreId(Integer.parseInt(textBox1.getText()));



StoreRoomData.insert(bean);

我希望这会清除

3 个答案:

答案 0 :(得分:3)

问题不是很清楚。你如何插入新记录?你有一个java方法吗?

如果是这样,您可以实施observer design pattern 。通过此模式,您可以定义一个观察者对象,该对象在插入新记录时会得到通知。您的代码看起来像这样

public interface DBObserver{
      public void notifyNewRecordInserted();
}

public class MyTable extends JTable implements DBOserver{
       public void notifyNewRecordInserted(){
              this.refresh();
       }

       public void refresh(){
            //some code to refresh the table
       }
}

public class DBManager(){
     private List<DBObserver> observers;

     public void addObserver(DBObserver observer){
         this.observers.add(observer);
     }


     public DBObserver  removeObserver(DBObserver observer){
         this.observers.remove(observer);
         return observer;
     }

     public void insert(Record record){
           //some code to insert the new record

           //notify observers
           this.notifyObservers();
     }


     private void notifyObservers(){
        for(DBObserver observer: this.observers){
               observer.notifyNewRecordInserted();
        }
     }
}

这样,即使您不知道首次开发解决方案时该组件可能是什么,您也可以自动更新插入新记录时需要更新的每个组件。

换句话说,现在您知道要更新表,但是将来您可能会注意到每次插入新记录时都要更新另一个表。

您所要做的就是在新类中实现DBObserver接口,并通过调用addObserver()使该类的对象自行注册。

notifyObservers方法通知所有已注册的观察者。该方法甚至不必知道组件是什么。


答案 1 :(得分:1)

你可以使用一个Thread,无限循环,你检查你的数据库,如果有一个新的记录插入,得到它&amp;将其插入Jtable。

new Thread(new Runnable() {
    @Override
    public void run() {
             while(true){
                       result = query.execute("select .....");    // check DB
                       if(newRecord){   // check if there is a new record 
                               // get the new record
                               //  insert it into Jtable
                       }
                       sleep(100) // to avoid consecutive acces to your DB
                      }
             }
}

答案 2 :(得分:1)

我正确地理解了这一点,你说你有一个单独的添加数据窗口/位置来添加输入内容的数据,然后将其提交到数据库。如果这是正确的,你可以做两件事之一,

  1. 单击“提交”时,您的函数会触发数据库插入和对该表绑定的数据模型的添加。这可以针对单个用户情况完成。

  2. 您只能更新数据库并让表自动刷新(使用线程),这会在新事物出现时不断从数据库中提取数据。如果您有多个用户的情况,这是要走的路。