首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JDBC 連接 Access:Debug 模式正常 Run 模式數據不提交的解決

     編輯:程式設計綜合問答

現象

JDBC 操作 Access,Debug 逐步執行時數據能寫入,直接 Run 運行時數據庫無變化。

原因分析

  • Access (Jet/ACE 引擎) 默認自動提交,但某些驅動/版本下,緩衝區刷新有延遲。
  • Debug 時斷點停頓給了驅動足夠時間刷新緩衝區;Run 時程序瞬間結束,連接關閉前緩衝區未刷新落盤。
  • 連接池/線程池未正確關閉導致事務未提交。

解決方案

  1. 顯式提交事務(推薦):
conn.setAutoCommit(false);
// ... 執行 SQL ...
conn.commit(); // 關鍵:強制提交
// 可選:Thread.sleep(100); 給驅動緩衝時間
  1. 關閉連接前確保提交:
try (Connection conn = DriverManager.getConnection(url);
     PreparedStatement ps = conn.prepareStatement(sql)) {
    ps.executeUpdate();
    conn.commit(); // 顯式提交
} // try-with-resources 自動關閉,但最好先 commit
  1. 檢查驅動版本:使用最新 UCanAccess 或 Jackcess 替代老舊 JDBC-ODBC Bridge(Java 8+ 已移除)。

驗證代碼

String sql = "INSERT INTO t_user(uid, login_name) VALUES (?, ?)";
try (Connection conn = DriverManager.getConnection(url);
     PreparedStatement ps = conn.prepareStatement(sql)) {
    conn.setAutoCommit(false);
    ps.setString(1, "3");
    ps.setString(2, "fxf");
    int result = ps.executeUpdate();
    conn.commit(); // 關鍵行
    if (result > 0) System.out.println("success!!!");
} catch (SQLException e) { e.printStackTrace(); }
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved