I've recently discovered a bug when writing JDBC programs to insert records into an Access database. Apparently, the last INSERT never gets committed. Calling the executeUpdate() method of a Statement using an INSERT query will commit only the previous INSERT.
To solve the problem, set auto-commit to false for the connection. Then, after each executeUpdate() call, do a commit.
Example (the changes required are in red):
import java.sql.*;
public class DbM {
private final String url = "jdbc:odbc:CIS135";
private final String cls = "sun.jdbc.odbc.JdbcOdbcDriver";
private Connection con = null;
private Statement stm = null;
public DbM() throws ClassNotFoundException, SQLException {
Class.forName(cls);
con = DriverManager.getConnection(url);
con.setAutoCommit(false);
stm = con.createStatement();
}
public ResultSet getResultSet(String sql) throws SQLException {
ResultSet rs = stm.executeQuery(sql);
return rs;
}
public int updateRecords(String sql) throws SQLException {
int iRowsAffected = stm.executeUpdate(sql);
con.commit();
return iRowsAffected;
}
}