我在下表
中获取了上面的GUI JTable数据CREATE TABLE store_room(
store_id int,
store_capacity int
);
当我向这个sql表插入新记录时,它必须立即同步更新jtable 任何人都可以告诉你该怎么做?
注意: - 问题不明确,我会解释一下
我的插入数据GUI是这样的
我的班级结构如下
我创建了一个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);
我希望这会清除
答案 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)
我正确地理解了这一点,你说你有一个单独的添加数据窗口/位置来添加输入内容的数据,然后将其提交到数据库。如果这是正确的,你可以做两件事之一,
单击“提交”时,您的函数会触发数据库插入和对该表绑定的数据模型的添加。这可以针对单个用户情况完成。
您只能更新数据库并让表自动刷新(使用线程),这会在新事物出现时不断从数据库中提取数据。如果您有多个用户的情况,这是要走的路。