Hi,
I am writing some stored procedure for Derby. And I am confused about the
transaction settings for a Derby stored procedure using a nested connection.
Actually I am trying to modify the transaction isolation level to something
like Serializable or Read Committed, and also change the auto commit to be
false so that I can manually control the rollback or commit in the stored
procedure. What I am doing is just something like:
connection = DriverManager.getConnection
("jdbc:default:connection");
connection.*setAutoCommit(false)*;
connection
.*setTransactionIsolation(
Connection.TRANSACTION_READ_COMMITTED)*;
PreparedStatement insertToIndexPerson = connection
.prepareStatement("INSERT INTO index_time_person
(index_time, person_email) VALUES (?, ?)");
insertToIndexPerson.setTimestamp(1, the_time);
insertToIndexPerson.setString(2, the_person_email);
insertToIndexPerson.executeUpdate();
insertToIndexPerson.close();
connection.*commit()*;
I found both the autocommit mode and isolation level can be modified
successfully.
But when I read Derby guide documents (derbydev.pdf "Programming
database-side JDBC procedures), I found these items which is obvious forbids
what I was doing:
*In order to preserve transactional atomicity, database-side JDBC procedures
that use
nested connections have the following limitations.
• Cannot issue a commit or rollback, unless called within a CALL statement.
• Cannot change connection attributes such as auto-commit.
*
If these items are true for my stored procedure, then I cannot modify the
isolation level and neither change the autocommit mode.
And I am yet confused about the first statement "*Cannot issue a commit or
rollback, unless called within a CALL statement."* Could a Derby procedure
be called without a "CALL statement"?
I am new to Derby and quite curious about these. Thanks!