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!

Reply via email to