db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Albert Kam" <moonblade.w...@gmail.com>
Subject commit and close needs specific ordering ?
Date Fri, 27 Jun 2008 11:41:43 GMT
Dear Derby,

Again .. I'm using Derby 10.4.1.3 with ClientDriver. :)
Anyway, now i'm trying to insert a row as can be looked from this source
code (you can run it also, i'll give the ddl and the only row data)

    private static void testInsert() throws Exception {
        Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
        Connection con =
DriverManager.getConnection("jdbc:derby://localhost:1527/sms");
        con.setAutoCommit(false);
        Statement cmd = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
        ResultSet rs = cmd.executeQuery("select * from smssvr_calls where id
= -1");
        rs.moveToInsertRow();
        rs.updateTimestamp("call_date", new Timestamp(new
java.util.Date().getTime()));
        rs.updateString("gateway_id", "Nokia30");
        rs.updateString("caller_id", "+62626262");
        rs.insertRow();
        con.commit();
        rs.close();
        cmd.close();
        con.close();
    }

The DDL :
CREATE TABLE smssvr_calls (
    id        int NOT NULL GENERATED BY DEFAULT AS IDENTITY,
    call_date    timestamp,
    gateway_id    varchar(64) NOT NULL,
    caller_id    varchar(64) NOT NULL
);

The only data :
INSERT INTO "APP"."SMSSVR_CALLS" (ID,CALL_DATE,GATEWAY_ID,CALLER_ID) VALUES
(1,{ts '2008-06-27 16:42:22.565'},'N30Modem','+6281xxx');

And the exception that results :
Exception in thread "main" java.sql.SQLException: Cannot close a connection
while a transaction is still active.
    at
org.apache.derby.client.am.SQLExceptionFactory.getSQLException(Unknown
Source)
    at org.apache.derby.client.am.SqlException.getSQLException(Unknown
Source)
    at org.apache.derby.client.am.Connection.closeResourcesX(Unknown Source)
    at org.apache.derby.client.am.Connection.closeX(Unknown Source)
    at org.apache.derby.client.net.NetConnection.closeX(Unknown Source)
    at org.apache.derby.client.am.Connection.close(Unknown Source)
    at org.apache.derby.client.net.NetConnection.close(Unknown Source)
    at sofco.Test.testInsert(Test.java:31)
    at sofco.Test.main(Test.java:14)
Caused by: org.apache.derby.client.am.SqlException: Cannot close a
connection while a transaction is still active.
    at
org.apache.derby.client.am.Connection.checkForTransactionInProgress(Unknown
Source)
    ... 7 more

But one thing is for sure, that the data is really inserted. It's just this
Exception.

But ...

If i arrange the ordering from the source above :
        con.commit();
        rs.close();
        cmd.close();
        con.close();

into
        rs.close();
        cmd.close();
        con.commit();
        con.close();

The exception doesnt happen ..

This is my first time this updatable thingy (i usually use ordinary dml or
hibernate) ..
Am i missing anything ? :)

Regards,
Albert Kam

-- 
Do not pursue the past. Do not lose yourself in the future.
The past no longer is. The future has not yet come.
Looking deeply at life as it is in the very here and now,
the practitioner dwells in stability and freedom.
(Thich Nhat Hanh)

Mime
View raw message