代碼執行無報錯但資料庫無資料,常見三大原因:
String sql = "insert into `uesr`(name) values('小蔡')"; // uesr → 應為 user
MySQL 若表不存在會拋錯,但若用反引號包裹錯誤名稱,某些版本/配置下可能不報錯?**實際上會報 Table 'db.uesr' doesn't exist**,所以這行應會拋異常。請確認 catch 區有無吞掉異常(`e.printStackTrace()` 有輸出嗎?)。
預設 `Connection` 自動提交為 `true`,但若被框架/連線池設為 `false`,需手動 `conn.commit()`。建議顯式控制:
conn.setAutoCommit(false);
try {
int rows = sta.executeUpdate(sql);
System.out.println("影響行數: " + rows); // 關鍵:印出返回值
conn.commit();
} catch (Exception e) {
conn.rollback();
throw e;
}
若 `name` 有唯一索引且 '小蔡' 已存在,`executeUpdate` 拋 `SQLIntegrityConstraintViolationException`,catch 印堆疊應可見。
最可能:**表名 `uesr` 拼錯**,或 **事務未提交**。加上 `println(rows)` 立見分曉。