Carl Rosenberger
Carl Rosenberger

Reputation: 910

Can I execute SQL statements directly in a JDO environment?

I am using Datanucleus JDO on top of HSqlDb.

I would like to execute the following SQL statement to tell HsqlDb to set the write delay to 0:
"SET WRITE_DELAY 0"

Is there a way I can do this from a JDO PersistenceManager or a PersistenceManagerFactory?

On a sidenote: I have tried to modify write_delay by using the following connection URL: jdbc:hsqldb:file:data/hsqldb/dbbench;write_delay=false

It didn't work. I debugged the HsqlDb sources and I could still see the write delay being set to 10 seconds.

Upvotes: 1

Views: 718

Answers (3)

user383680
user383680

Reputation: 39

I think this page http://www.datanucleus.org/products/accessplatform/jdo/datastore_connection.html tells all needed. No ?

Upvotes: 0

Todd Owen
Todd Owen

Reputation: 16188

You can write a startup script, dbbench.script in this example, and put the SQL in there.

See: http://best-practice-software-engineering.ifs.tuwien.ac.at/technology/tech-hsqldb.html

Upvotes: 1

Carl Rosenberger
Carl Rosenberger

Reputation: 910

I think I have found a solution that will work for me:

public PersistenceManager getPersistenceManager() {
    PersistenceManager persistenceManager = 
        _persistenceManagerFactory.getPersistenceManager();
    JDOConnection dataStoreConnection = 
        persistenceManager.getDataStoreConnection();
    Object nativeConnection = dataStoreConnection.getNativeConnection();
    if(! (nativeConnection instanceof Connection) ){
        return persistenceManager;
    }

    Connection connection = (Connection) nativeConnection;
    try {
        Statement statement = connection.createStatement();
        statement.executeUpdate("SET WRITE_DELAY 0");
        statement.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return persistenceManager;
}

Upvotes: 1

Related Questions