2010-06-13 101 views
1

我在HSqlDb上使用Datanucleus JDO。我可以直接在JDO環境中執行SQL語句嗎?

我想執行下面的SQL語句來告訴HSQLDB設置寫入延遲0:
「SET WRITE_DELAY 0」

有沒有一種方法可以讓我從一個JDO PersistenceManager的或一個PersistenceManagerFactory做到這一點?

在旁註:我曾嘗試使用下面的連接URL修改WRITE_DELAY: JDBC:HSQLDB:文件:數據/ HSQLDB/dbbench; WRITE_DELAY =假

它沒有工作。我調試了HsqlDb源,我仍然可以看到寫延遲被設置爲10秒。

回答

1

我想我已經找到了解決方案,爲我工作:

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; 
} 
+0

注意:我後來發現,您必須關閉通過此方式連接的連接,否則您將用完連接。由於命名,這有點違反直覺。 「獲取」NativeConnection()通常會打開一個連接。 – 2010-06-20 20:43:48

相關問題