On 31.05.10 06:03, Hawkx wrote:
I found that derby do not auto commit data change on my computer, even I set
auto commit to true explicitly. nothing written to database, unless I call
commit().

Hi,

I think this is expected behavior, because you don't close the statement.
From [1] (* added by me):
"Auto-commit mode means that when a statement is completed, the method /commit/ is called on that statement automatically. Auto-commit in effect makes every SQL statement a transaction. The commit occurs when the statement completes or the next statement is executed, whichever comes first. *In the case of a statement returning a /ResultSet/, the statement completes when the last row of the /ResultSet/ has been retrieved or the /ResultSet/ has been closed explicitly.*"

When you call close Connection.close(), Derby will do a rollback because there is an active transaction (if you had auto-commit set to false, an exception would have been thrown).


Hope this helps,
--
Kristian

[1]  http://db.apache.org/derby/docs/dev/devguide/cdevconcepts29416.html

java version "1.6.0_19"
Java(TM) SE Runtime Environment (build 1.6.0_19-b04)
Java HotSpot(TM) Client VM (build 16.2-b04, mixed mode, sharing)
derby 10.6.1 embedded driver

Code:
     Connection con =
DriverManager.getConnection("jdbc:derby:D:/test/testdb");
//    con.setAutoCommit(true);
     Statement stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
     ResultSet rst = stm.executeQuery("SELECT * FROM test_table");
     rst.moveToInsertRow();
     rst.updateString(1, "test line");
     rst.insertRow();
     rst.beforeFirst();
     while (rst.next()) {
       System.out.println(rst.getString(1));
     }
     System.out.println(con.getAutoCommit());
//    con.commit();
     con.close();


Reply via email to