Java 打开现有嵌入式neo4j数据库
我试图在嵌入式javeneo4japi上使用scala。我在打开数据库以便以后阅读时遇到问题。下面的代码应该在每次运行时创建两个节点和一条边,但在每次运行开始时返回所有节点和边。因此,第一次0个节点,第二次2个节点,第三次4个节点,以此类推Java 打开现有嵌入式neo4j数据库,java,scala,neo4j,Java,Scala,Neo4j,我试图在嵌入式javeneo4japi上使用scala。我在打开数据库以便以后阅读时遇到问题。下面的代码应该在每次运行时创建两个节点和一条边,但在每次运行开始时返回所有节点和边。因此,第一次0个节点,第二次2个节点,第三次4个节点,以此类推 import org.neo4j.tooling.GlobalGraphOperations import org.neo4j.graphdb.factory.GraphDatabaseFactory import org.neo4j.graphdb.Rel
import org.neo4j.tooling.GlobalGraphOperations
import org.neo4j.graphdb.factory.GraphDatabaseFactory
import org.neo4j.graphdb.RelationshipType
object tester extends App{
val DB_PATH = "data/neo4j"
object KNOWS extends RelationshipType {
override def name(): String = "KNOWS"
}
val graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH) //seems to reset the whole directory
println(graphDb)
try {
println("Begin")
val tx = graphDb.beginTx() // Database operations go here
println(GlobalGraphOperations.at(graphDb).getAllNodes.iterator)
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes.iterator
while (nodes.hasNext()) {
println(nodes.next())
}
nodes.close()
val relT = GlobalGraphOperations.at(graphDb).getAllRelationships.iterator
while (relT.hasNext()) {
println(relT.next())
}
println("Success - Begin")
tx.success()
}
try {
val tx = graphDb.beginTx() // Database operations go here
val firstNode = graphDb.createNode
val secondNode = graphDb.createNode
val relationship = firstNode.createRelationshipTo(secondNode, KNOWS)
println(firstNode)
println(secondNode)
println(relationship)
println(relationship.getType.name)
tx.success()
println("Success")
}
println("End")
try {
val tx = graphDb.beginTx() // Database operations go here
println(GlobalGraphOperations.at(graphDb).getAllNodes.iterator)
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes.iterator
while (nodes.hasNext()) {
println(nodes.next())
}
nodes.close()
val relT = GlobalGraphOperations.at(graphDb).getAllRelationships.iterator
while (relT.hasNext()) {
println(relT.next())
}
println("Success - End")
tx.success()
}
graphDb.shutdown()
}
然而,每次它似乎只是给出一个空数据库,然后是2个新节点。这是怎么回事
EmbeddedGraphDatabase [data/neo4j]
Begin
org.neo4j.tooling.GlobalGraphOperations$1$1@74c49a90
Success - Begin
Node[2]
Node[3]
Relationship[1]
KNOWS
Success
End
org.neo4j.tooling.GlobalGraphOperations$1$1@2ec0df08
Node[2]
Node[3]
Relationship[1]
Success - End
Process finished with exit code 0
问题是您正在指定相对路径。可能是每次运行clean和build时,都会清空目标目录(或dist,或ide、开发框架用作分发目录的任何内容),因此数据库是空的,因为它每次都是从头创建的。尝试使用绝对路径。问题在于您正在指定相对路径。可能是每次运行clean和build时,都会清空目标目录(或dist,或ide、开发框架用作分发目录的任何内容),因此数据库是空的,因为它每次都是从头创建的。尝试使用绝对路径。问题在于您正在指定相对路径。可能是每次运行clean和build时,都会清空目标目录(或dist,或ide、开发框架用作分发目录的任何内容),因此数据库是空的,因为它每次都是从头创建的。尝试使用绝对路径。问题在于您正在指定相对路径。可能是每次运行clean和build时,都会清空目标目录(或dist,或ide、开发框架用作分发目录的任何内容),因此数据库是空的,因为它每次都是从头创建的。尝试使用绝对路径。发生这种情况是因为您没有。您可以通过调用
tx.close()
来完成此操作。另外,我认为在try
中实例化tx
并不是应该的。以下是您的程序的工作版本:
import org.neo4j.tooling.GlobalGraphOperations
import org.neo4j.graphdb.factory.GraphDatabaseFactory
import org.neo4j.graphdb.RelationshipType
object tester extends App{
val DB_PATH = "data/neo4j"
object KNOWS extends RelationshipType {
override def name(): String = "KNOWS"
}
val graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH)
println(graphDb)
val tx1 = graphDb.beginTx() // Database operations go here
try {
println("Will list all nodes")
println("1 - Begin")
println("GlobalGraphOperations.at(graphDb).getAllNodes.iterator")
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes.iterator
while (nodes.hasNext()) {
println(nodes.next())
}
nodes.close()
val relT = GlobalGraphOperations.at(graphDb).getAllRelationships.iterator
while (relT.hasNext()) {
println(relT.next())
}
println("1 - Success - Begin")
tx1.success()
}
finally {
tx1.close()
}
val tx2 = graphDb.beginTx() // Database operations go here
try {
val firstNode = graphDb.createNode
val secondNode = graphDb.createNode
val relationship = firstNode.createRelationshipTo(secondNode, KNOWS)
println(firstNode)
println(secondNode)
println(relationship)
println(relationship.getType.name)
tx2.success()
println("2 - Success")
}
finally {
tx2.close()
}
println("2 - End")
val tx3 = graphDb.beginTx() // Database operations go here
try {
println(GlobalGraphOperations.at(graphDb).getAllNodes.iterator)
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes.iterator
while (nodes.hasNext()) {
println(nodes.next())
}
nodes.close()
val relT = GlobalGraphOperations.at(graphDb).getAllRelationships.iterator
while (relT.hasNext()) {
println(relT.next())
}
println("3 - Success - End")
tx3.success()
}
finally {
tx3.close()
}
graphDb.shutdown()
}
额外的
我试着让你的程序更接近“scala风格”。此外,我还尝试删除样板文件和重复代码。为此,我:
- 使用
来处理Java集合和Iterables,就像我们在Scala中处理它们一样JavaConverters
- 创建了一个方法
,用于在scala中获取我们的事务withTransaction
import org.neo4j.tooling.GlobalGraphOperations
import org.neo4j.graphdb.factory.GraphDatabaseFactory
import org.neo4j.graphdb.RelationshipType
import org.neo4j.graphdb.Transaction
import scala.collection.JavaConverters._
object tester extends App{
val DB_PATH = "data/neo4j"
object KNOWS extends RelationshipType {
override def name(): String = "KNOWS"
}
def withTransaction (doWithTransaction: Transaction => Unit) {
val tempTx = graphDb.beginTx()
try {
doWithTransaction(tempTx)
}
finally {
tempTx.close()
}
}
val graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH)
println(graphDb)
withTransaction { tx =>
println("1 - Begin")
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes
for (node <- nodes.asScala)
println(node)
val relTs = GlobalGraphOperations.at(graphDb).getAllRelationships
for (irelT <- relTs.asScala)
println(irelT)
println("1 - Success - Begin")
tx.success()
}
withTransaction { tx =>
val firstNode = graphDb.createNode
val secondNode = graphDb.createNode
val relationship = firstNode.createRelationshipTo(secondNode, KNOWS)
println(firstNode)
println(secondNode)
println(relationship)
println(relationship.getType.name)
tx.success()
println("2 - Success")
}
println("2 - End")
withTransaction { tx =>
println(GlobalGraphOperations.at(graphDb).getAllNodes.iterator)
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes
for (node <- nodes.asScala)
println(node)
val relTs = GlobalGraphOperations.at(graphDb).getAllRelationships
for (irelT <- relTs.asScala)
println(irelT)
println("3 - Success - End")
tx.success()
}
graphDb.shutdown()
}
import org.neo4j.tooling.globalgraphhoperations
导入org.neo4j.graphdb.factory.GraphDatabaseFactory
导入org.neo4j.graphdb.RelationshipType
导入org.neo4j.graphdb.Transaction
导入scala.collection.JavaConverters_
对象测试仪扩展应用程序{
val DB_PATH=“数据/neo4j”
对象扩展了RelationshipType{
覆盖def name():String=“知道”
}
def withTransaction(doWithTransaction:Transaction=>Unit){
val testex=graphDb.beginTx()
试一试{
doWithTransaction(TENTX)
}
最后{
TENTEX.close()
}
}
val graphDb=new GraphDatabaseFactory().newEmbeddedDatabase(DB_路径)
println(graphDb)
withTransaction{tx=>
println(“1-开始”)
val nodes=GlobalGraphOperations.at(graphDb).getAllNodes
用于(节点)
println(GlobalGraphOperations.at(graphDb.getAllNodes.iterator)
val nodes=GlobalGraphOperations.at(graphDb).getAllNodes
对于(node这是因为您不是。您可以通过调用tx.close()
来实现这一点。此外,我认为在try
中实例化tx
并不是应该的方式。下面是您的程序的工作版本:
import org.neo4j.tooling.GlobalGraphOperations
import org.neo4j.graphdb.factory.GraphDatabaseFactory
import org.neo4j.graphdb.RelationshipType
object tester extends App{
val DB_PATH = "data/neo4j"
object KNOWS extends RelationshipType {
override def name(): String = "KNOWS"
}
val graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH)
println(graphDb)
val tx1 = graphDb.beginTx() // Database operations go here
try {
println("Will list all nodes")
println("1 - Begin")
println("GlobalGraphOperations.at(graphDb).getAllNodes.iterator")
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes.iterator
while (nodes.hasNext()) {
println(nodes.next())
}
nodes.close()
val relT = GlobalGraphOperations.at(graphDb).getAllRelationships.iterator
while (relT.hasNext()) {
println(relT.next())
}
println("1 - Success - Begin")
tx1.success()
}
finally {
tx1.close()
}
val tx2 = graphDb.beginTx() // Database operations go here
try {
val firstNode = graphDb.createNode
val secondNode = graphDb.createNode
val relationship = firstNode.createRelationshipTo(secondNode, KNOWS)
println(firstNode)
println(secondNode)
println(relationship)
println(relationship.getType.name)
tx2.success()
println("2 - Success")
}
finally {
tx2.close()
}
println("2 - End")
val tx3 = graphDb.beginTx() // Database operations go here
try {
println(GlobalGraphOperations.at(graphDb).getAllNodes.iterator)
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes.iterator
while (nodes.hasNext()) {
println(nodes.next())
}
nodes.close()
val relT = GlobalGraphOperations.at(graphDb).getAllRelationships.iterator
while (relT.hasNext()) {
println(relT.next())
}
println("3 - Success - End")
tx3.success()
}
finally {
tx3.close()
}
graphDb.shutdown()
}
额外的
我试图使您的程序更接近“scala风格”。此外,我还试图删除样板文件和重复代码。为了实现这一点,我:
- 使用
JavaConverters
来处理Java集合和Iterables,就像我们在Scala中处理它们一样
- 创建了一个方法
withTransaction
,用于在scala中获取我们的事务
结果是:
import org.neo4j.tooling.GlobalGraphOperations
import org.neo4j.graphdb.factory.GraphDatabaseFactory
import org.neo4j.graphdb.RelationshipType
import org.neo4j.graphdb.Transaction
import scala.collection.JavaConverters._
object tester extends App{
val DB_PATH = "data/neo4j"
object KNOWS extends RelationshipType {
override def name(): String = "KNOWS"
}
def withTransaction (doWithTransaction: Transaction => Unit) {
val tempTx = graphDb.beginTx()
try {
doWithTransaction(tempTx)
}
finally {
tempTx.close()
}
}
val graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH)
println(graphDb)
withTransaction { tx =>
println("1 - Begin")
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes
for (node <- nodes.asScala)
println(node)
val relTs = GlobalGraphOperations.at(graphDb).getAllRelationships
for (irelT <- relTs.asScala)
println(irelT)
println("1 - Success - Begin")
tx.success()
}
withTransaction { tx =>
val firstNode = graphDb.createNode
val secondNode = graphDb.createNode
val relationship = firstNode.createRelationshipTo(secondNode, KNOWS)
println(firstNode)
println(secondNode)
println(relationship)
println(relationship.getType.name)
tx.success()
println("2 - Success")
}
println("2 - End")
withTransaction { tx =>
println(GlobalGraphOperations.at(graphDb).getAllNodes.iterator)
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes
for (node <- nodes.asScala)
println(node)
val relTs = GlobalGraphOperations.at(graphDb).getAllRelationships
for (irelT <- relTs.asScala)
println(irelT)
println("3 - Success - End")
tx.success()
}
graphDb.shutdown()
}
import org.neo4j.tooling.globalgraphhoperations
导入org.neo4j.graphdb.factory.GraphDatabaseFactory
导入org.neo4j.graphdb.RelationshipType
导入org.neo4j.graphdb.Transaction
导入scala.collection.JavaConverters_
对象测试仪扩展应用程序{
val DB_PATH=“数据/neo4j”
对象扩展了RelationshipType{
覆盖def name():String=“知道”
}
def withTransaction(doWithTransaction:Transaction=>Unit){
val testex=graphDb.beginTx()
试一试{
doWithTransaction(TENTX)
}
最后{
TENTEX.close()
}
}
val graphDb=new GraphDatabaseFactory().newEmbeddedDatabase(DB_路径)
println(graphDb)
withTransaction{tx=>
println(“1-开始”)
val nodes=GlobalGraphOperations.at(graphDb).getAllNodes
用于(节点)
println(GlobalGraphOperations.at(graphDb.getAllNodes.iterator)
val nodes=GlobalGraphOperations.at(graphDb).getAllNodes
对于(node这是因为您不是。您可以通过调用tx.close()
来实现这一点。此外,我认为在try
中实例化tx
并不是应该的方式。下面是您的程序的工作版本:
import org.neo4j.tooling.GlobalGraphOperations
import org.neo4j.graphdb.factory.GraphDatabaseFactory
import org.neo4j.graphdb.RelationshipType
object tester extends App{
val DB_PATH = "data/neo4j"
object KNOWS extends RelationshipType {
override def name(): String = "KNOWS"
}
val graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH)
println(graphDb)
val tx1 = graphDb.beginTx() // Database operations go here
try {
println("Will list all nodes")
println("1 - Begin")
println("GlobalGraphOperations.at(graphDb).getAllNodes.iterator")
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes.iterator
while (nodes.hasNext()) {
println(nodes.next())
}
nodes.close()
val relT = GlobalGraphOperations.at(graphDb).getAllRelationships.iterator
while (relT.hasNext()) {
println(relT.next())
}
println("1 - Success - Begin")
tx1.success()
}
finally {
tx1.close()
}
val tx2 = graphDb.beginTx() // Database operations go here
try {
val firstNode = graphDb.createNode
val secondNode = graphDb.createNode
val relationship = firstNode.createRelationshipTo(secondNode, KNOWS)
println(firstNode)
println(secondNode)
println(relationship)
println(relationship.getType.name)
tx2.success()
println("2 - Success")
}
finally {
tx2.close()
}
println("2 - End")
val tx3 = graphDb.beginTx() // Database operations go here
try {
println(GlobalGraphOperations.at(graphDb).getAllNodes.iterator)
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes.iterator
while (nodes.hasNext()) {
println(nodes.next())
}
nodes.close()
val relT = GlobalGraphOperations.at(graphDb).getAllRelationships.iterator
while (relT.hasNext()) {
println(relT.next())
}
println("3 - Success - End")
tx3.success()
}
finally {
tx3.close()
}
graphDb.shutdown()
}
额外的
我试图使您的程序更接近“scala风格”。此外,我还试图删除样板文件和重复代码。为了实现这一点,我:
- 使用
JavaConverters
来处理Java集合和Iterables,就像我们在Scala中处理它们一样
- 创建了一个方法
withTransaction
,用于在scala中获取我们的事务
结果是:
import org.neo4j.tooling.GlobalGraphOperations
import org.neo4j.graphdb.factory.GraphDatabaseFactory
import org.neo4j.graphdb.RelationshipType
import org.neo4j.graphdb.Transaction
import scala.collection.JavaConverters._
object tester extends App{
val DB_PATH = "data/neo4j"
object KNOWS extends RelationshipType {
override def name(): String = "KNOWS"
}
def withTransaction (doWithTransaction: Transaction => Unit) {
val tempTx = graphDb.beginTx()
try {
doWithTransaction(tempTx)
}
finally {
tempTx.close()
}
}
val graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH)
println(graphDb)
withTransaction { tx =>
println("1 - Begin")
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes
for (node <- nodes.asScala)
println(node)
val relTs = GlobalGraphOperations.at(graphDb).getAllRelationships
for (irelT <- relTs.asScala)
println(irelT)
println("1 - Success - Begin")
tx.success()
}
withTransaction { tx =>
val firstNode = graphDb.createNode
val secondNode = graphDb.createNode
val relationship = firstNode.createRelationshipTo(secondNode, KNOWS)
println(firstNode)
println(secondNode)
println(relationship)
println(relationship.getType.name)
tx.success()
println("2 - Success")
}
println("2 - End")
withTransaction { tx =>
println(GlobalGraphOperations.at(graphDb).getAllNodes.iterator)
val nodes = GlobalGraphOperations.at(graphDb).getAllNodes
for (node <- nodes.asScala)
println(node)
val relTs = GlobalGraphOperations.at(graphDb).getAllRelationships
for (irelT <- relTs.asScala)
println(irelT)
println("3 - Success - End")
tx.success()
}
graphDb.shutdown()
}
import org.neo4j.tooling.globalgraphhoperations
导入org.neo4j.graphdb.factory.GraphDatabaseFactory
导入org.neo4j.graphdb.RelationshipType
导入org.neo4j.graphdb.Transaction
导入scala.collection.JavaConverters_
对象测试仪扩展应用程序{
val DB_PATH=“数据/neo4j”
对象扩展了RelationshipType{
覆盖def name():String=“知道”
}
def withTransaction(doWithTransaction:Transaction=>单位){