まず, 「更新データがない」ことがあるのでしょうか.
前のご質問からすると, テーブルにはDBからのデータが並んでいるはずで, それを編集して更新しているはずです.
そして, Statement#executeUpdate() は処理した件数を返します.
キーである(と思われる) PID を条件にした UPDATE であれば, 成功すれば 1, 失敗すれば 0 となるのではないでしょうか.
ですので, UPDATE 前に SELECT で確認せずとも, UPDATE の実行結果からエラーを判定すれば良いのではと思います.
以下は(MySql 環境が無いので) DB を模して動作するモノです.
更新はボタン操作でなくテーブルの「内容」の編集後に自動で行い, 再表示も自動ですので表示ボタンもありません. (PID は編集不可としています.)
登録ボタンは入力内容に文字列がある場合のみ有効, 削除ボタンは行を選択している場合のみ有効とする等で, エラーになる状況を減らしています.
(MySql にアクセスするクラスも作ってはあるのですが, 動かしていないことと文字数制限に掛かるので入れていません.)
java
1package teratail.q250457;
2//package DBaccess;
3
4import java.awt.*;
5import java.awt.event.ActionEvent;
6import java.sql.SQLException;
7import java.util.*;
8import java.util.List;
9
10import javax.swing.*;
11import javax.swing.border.EmptyBorder;
12import javax.swing.event.*;
13import javax.swing.table.AbstractTableModel;
14
15public class DBAccess extends JFrame implements DatabaseExceptionProcessor {
16
17 public static void main(String[] args) {
18 SwingUtilities.invokeLater(new Runnable() {
19 public void run() {
20 try {
21 new DBAccess().setVisible(true);
22 } catch(Exception e) {
23 e.printStackTrace();
24 }
25 }
26 });
27 }
28
29 private DatabaseAccessor dba;
30 private JTable table;
31
32 public DBAccess() throws ClassNotFoundException, SQLException {
33 super("DBアクセスプログラム");
34 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
35 setBounds(100, 100, 450, 300);
36 setLocationRelativeTo(null);
37
38 //dba = new MysqlDatabaseAccessor(this);
39 dba = new DummyDatabaseAccessor();
40 table = new JTable(dba.selectAll());
41
42 JTextField textField = new JTextField();
43 textField.setColumns(10);
44 textField.setAlignmentX(JLabel.LEFT_ALIGNMENT);
45
46 InsertAction insertAction = new InsertAction(textField);
47 DeleteAction deleteAction = new DeleteAction();
48
49 JPanel contentPane = new JPanel();
50 contentPane.setLayout(new BorderLayout());
51 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
52 setContentPane(contentPane);
53
54 Box northPanel = Box.createVerticalBox(); {
55 JPanel buttonsPanel = new JPanel(new FlowLayout());
56 buttonsPanel.setAlignmentX(JLabel.LEFT_ALIGNMENT); {
57 buttonsPanel.add(new JButton(insertAction));
58 buttonsPanel.add(new JButton(deleteAction));
59 }
60 northPanel.add(buttonsPanel);
61 northPanel.add(createLabel("入力内容"));
62 northPanel.add(textField);
63 northPanel.add(createLabel("表示内容"));
64 }
65 contentPane.add(northPanel, BorderLayout.NORTH);
66 contentPane.add(new JScrollPane(table), BorderLayout.CENTER);
67
68 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
69 table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
70 @Override
71 public void valueChanged(ListSelectionEvent e) {
72 int pid = -1;
73 int index = table.getSelectedRow();
74 if(index >= 0) {
75 index = table.convertRowIndexToModel(index);
76 pid = ((MyTableModel)table.getModel()).getPid(index);
77 }
78 deleteAction.setTarget(pid);
79 }
80 });
81 table.clearSelection();
82 }
83 private JLabel createLabel(String text) {
84 JLabel label = new JLabel(text);
85 label.setAlignmentX(JLabel.LEFT_ALIGNMENT);
86 return label;
87 }
88
89 private class InsertAction extends AbstractAction {
90 private JTextField textField;
91 public InsertAction(JTextField textField) {
92 putValue(NAME, "登録");
93 setEnabled(false);
94 this.textField = textField;
95 textField.getDocument().addDocumentListener(new DocumentListener() {
96 @Override
97 public void removeUpdate(DocumentEvent e) { checkEnable(); }
98 @Override
99 public void insertUpdate(DocumentEvent e) { checkEnable(); }
100 @Override
101 public void changedUpdate(DocumentEvent e) { checkEnable(); }
102 void checkEnable() {
103 InsertAction.this.setEnabled(textField.getText().length() > 0);
104 }
105 });
106 }
107 @Override
108 public void actionPerformed(ActionEvent ae) {
109 String text = textField.getText();
110 if(dba.insert(text) == 1) {
111 table.setModel(dba.selectAll());
112 textField.setText(""); //クリア
113 }
114 }
115 }
116
117 private class DeleteAction extends AbstractAction {
118 private int pid;
119 DeleteAction() {
120 putValue(NAME, "削除");
121 setEnabled(false);
122 }
123 void setTarget(int pid) {
124 this.pid = pid;
125 setEnabled(pid >= 0);
126 }
127 @Override
128 public void actionPerformed(ActionEvent ae) {
129 if(dba.delete(pid) == 1) {
130 table.setModel(dba.selectAll());
131 }
132 }
133 }
134
135 @Override
136 public void receiveException(SQLException e) {
137 JOptionPane.showMessageDialog(this, e.getMessage());
138 e.printStackTrace();
139 }
140}
141
142class MyTableModel extends AbstractTableModel {
143 private String[] columnNames = new String[] { "PID", "内容"};
144 private static class Row {
145 final Integer pid;
146 final String naiyou;
147 Row(int pid, String naiyou) {
148 this.pid = pid;
149 this.naiyou = naiyou;
150 }
151 }
152 private List<Row> rows = new ArrayList<>();
153 private DatabaseAccessor dba;
154
155 MyTableModel(DatabaseAccessor dba) {
156 this.dba = dba;
157 }
158
159 void addRow(int pid, String naiyou) {
160 rows.add(new Row(pid, naiyou));
161 fireTableRowsInserted(rows.size()-1, rows.size()-1);
162 }
163 int getPid(int rowIndex) {
164 return rows.get(rowIndex).pid;
165 }
166
167 @Override
168 public String getColumnName(int columnIndex) {
169 return columnNames[columnIndex];
170 }
171 @Override
172 public int getRowCount() {
173 return rows.size();
174 }
175 @Override
176 public int getColumnCount() {
177 return columnNames.length;
178 }
179 @Override
180 public Object getValueAt(int rowIndex, int columnIndex) {
181 if(columnIndex == 0) return rows.get(rowIndex).pid;
182 if(columnIndex == 1) return rows.get(rowIndex).naiyou;
183 return null;
184 }
185 @Override
186 public boolean isCellEditable(int rowIndex, int columnIndex) {
187 return columnIndex == 1;
188 }
189 @Override
190 public void setValueAt(Object value, int rowIndex, int columnIndex) {
191 rows.set(rowIndex, new Row(rows.get(rowIndex).pid, (String)value));
192 fireTableCellUpdated(rowIndex, columnIndex);
193 if(dba != null) dba.update(rows.get(rowIndex).pid, (String)value);
194 }
195}
196
197interface DatabaseExceptionProcessor {
198 void receiveException(SQLException e);
199}
200interface DatabaseAccessor {
201 MyTableModel selectAll();
202 int insert(String text);
203 int update(int pid, String text);
204 int delete(int pid);
205}
206class DummyDatabaseAccessor implements DatabaseAccessor {
207 private static String TEST[] = {"ABC","あいう","123"};
208 private int nextPid = 0;
209 private Map<Integer,String> rows = new TreeMap<Integer, String>();
210 DummyDatabaseAccessor() {
211 for(String s : TEST) rows.put(nextPid++, s);
212 }
213 @Override
214 public MyTableModel selectAll() {
215 MyTableModel tableModel = new MyTableModel(this);
216 for(Map.Entry<Integer,String> entry : rows.entrySet()) {
217 tableModel.addRow(entry.getKey(), entry.getValue());
218 }
219 return tableModel;
220 }
221 @Override
222 public int insert(String text) {
223 System.out.println("insert text="+text);
224 rows.put(nextPid++, text);
225 return 1;
226 }
227 @Override
228 public int update(int pid, String text) {
229 System.out.println("update pid="+pid+", text="+text);
230 if(!rows.containsKey(pid)) return 0;
231 rows.put(pid, text);
232 return 1;
233 }
234 @Override
235 public int delete(int pid) {
236 System.out.println("delete pid="+pid);
237 if(!rows.containsKey(pid)) return 0;
238 rows.remove(pid);
239 return 1;
240 }
241}