The TableModel is not Thread Safe, so you have to be careful with using it in multiple threads. So there are a few things to consider:
1) Preventing multiple threads from modifying the TableModel at one time.
-- The simple solution to this is to disable any of the user interface when the first request is made. For example, the first thing that happens in the actionPerformed method is to disable the button which caused the action. This prevents the user from pressing the button again. Of course at the end of the process you will have to re-enable the button.
You should also disable all other buttons which modify the TableModel.
2) Preventing incomplete reads during updates.
-- Since the TableModel is not Thread Safe, your GUI could try to read the model for display purposes while rows are getting written to it. This could lead to displaying garbage data. I would suggest you use a SwingWorker to fix this. You need to push all the calls which update the TableModel into the EventDispatchThread, while keeping all the long DB work outside of it. With SwingWorker, you would put the DB Processing in the doInBackround(). You would put the model update (model.addRow(...)) into the process() method. In the doInBackground() method, when you want to update the GUI with a new row, you call publish() with the data to put into the new row. Finally, in the done() method is where you would do all the GUI clean up (like re-enabling the buttons).