【问题标题】:Can I execute SQL statements directly in a JDO environment?我可以在 JDO 环境中直接执行 SQL 语句吗?
【发布时间】:2010-06-13 12:44:24
【问题描述】:

我在 HSqlDb 之上使用 Datanucleus JDO。

我想执行以下 SQL 语句告诉 HsqlDb 将写入延迟设置为 0:
"SET WRITE_DELAY 0"

有什么方法可以通过 JDO PersistenceManager 或 PersistenceManagerFactory 做到这一点?

附带说明:我尝试使用以下连接 URL 修改 write_delay: jdbc:hsqldb:file:data/hsqldb/dbbench;write_delay=false

没有用。我调试了 HsqlDb 源,我仍然可以看到写入延迟设置为 10 秒。

【问题讨论】:

    标签: sql jdo hsqldb


    【解决方案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;
    }
    

    【讨论】:

    • 注意:后来我发现你必须关闭你这样得到的连接,否则你会用完连接。由于命名,这有点违反直觉。 "get"NativeConnection() 通常会打开一个连接。
    【解决方案2】:

    您可以编写一个启动脚本,在本例中为 dbbench.script,并将 SQL 放入其中。

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

    【讨论】:

    • 谢谢,是的,这对于我的用例来说当然也是一个可能的解决方案。
    【解决方案3】:

    我认为这个页面 http://www.datanucleus.org/products/accessplatform/jdo/datastore_connection.html 告诉所有需要的。没有?

    【讨论】:

    • 确实如此,反正我就是这么用的,看我自己的回答。
    猜你喜欢
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 2014-03-29
    相关资源
    最近更新 更多