orientdb:如何完全关闭内存数据库(Java/ScalaAPI)

orientdb:如何完全关闭内存数据库(Java/ScalaAPI),orientdb,Orientdb,我正在尝试为scala中的orientDB客户机编写一些单元测试实用程序 下面是一个在DB上运行的函数,它应该用代码包装该函数,以便为单个单元测试创建和销毁DB 然而,关于如何清理内存数据库的文档并不多(而且在许多开源项目中,人们似乎只是泄漏数据库并在新端口上创建新数据库) 只要调用db.close,数据库就会监听端口,后续测试就会失败。调用db.drop似乎可行,但前提是func成功地将数据添加到db中 那么,在finally子句中需要什么清理呢 @Test def fTest2():

我正在尝试为scala中的orientDB客户机编写一些单元测试实用程序

下面是一个在DB上运行的函数,它应该用代码包装该函数,以便为单个单元测试创建和销毁DB

然而,关于如何清理内存数据库的文档并不多(而且在许多开源项目中,人们似乎只是泄漏数据库并在新端口上创建新数据库)

只要调用db.close,数据库就会监听端口,后续测试就会失败。调用db.drop似乎可行,但前提是func成功地将数据添加到db中

那么,在finally子句中需要什么清理呢

  @Test
  def fTest2(): Unit = {


    def withJSONDBLoan(func: ODatabaseDocumentTx => Unit) : Unit = {
      val db: ODatabaseDocumentTx = new ODatabaseDocumentTx("memory:jsondb")
      db.create()
      try {

        func(db)

      } finally {
        if (!db.isClosed){
          db.close   // Nope. DB is leaked.
        }
        // db.drop seems to close the DB but can't
        // see when to safely call this.
      }
    }


    val query1 = "insert into ouser set name='test',password='test', status='ACTIVE'"
    withJSONDBLoan { db =>
      db.command(new OCommandSQL(query1)).execute[ODocument]()
    }

    // Fails at create because DB already exists.
    val query2 = "insert into ouser set name='test2',password='test2', status='ACTIVE'"
    withJSONDBLoan { db =>
      db.command(new OCommandSQL(query2)).execute[ODocument]()
    }
  }

我试过你的代码,它对我有效


希望有帮助。

当然。它之所以有效是因为数据库泄露了。我将用失败的查询更新问题。