java连接neo4j之内嵌式

neo4j连接java目前主要有嵌入式、jdbc和rest api。

嵌入式:使用到的lib包在neo4j下载包的lib里(对于windows,不建议下载exe版,因为不包含代码需要的lib包)

创建节点和关系:

final String DB_PATH = "E:/neo4jdb"; //数据库路径
GraphDatabaseService graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH );  //连接一次比较耗时
Transaction tx = graphDb.beginTx();  //事务
tx.success();
Node firstNode,secondNode;
Relationship relationship;
firstNode = graphDb.createNode();  //创建一个节点
firstNode.setProperty( "name", "node1" );//指明节点的属性
secondNode = graphDb.createNode();
secondNode.setProperty( "name", "node2" );
relationship = firstNode.createRelationshipTo( secondNode, RelTypes.KNOWS );  //创建两个节点间的关系
relationship.setProperty( "weight", 10 ); //设置关系的属性

在创建节点(关系)时如果需要指定类型,则需要声明一个枚举:

private static enum RelTypes implements RelationshipType  //节点的类型和关系的类型
    {
        KNOWS
    }

使用cypher查询数据

ExecutionEngine engine = new ExecutionEngine(this.graphDb);
ExecutionResult result = engine.execute("match n return n.name as name;");
ResourceIterator<String> iterator = result.columnAs("name");  //获取某列值,如果不用as XXX,取值的时候要用n.name
        while(iterator.hasNext()) {
            System.out.println(iterator.next());
        }

查询两点直接的最短路径:目前内嵌式提供多种算法计算最短路径,不过目前只看了shorestPath和dijkstra这两种算法,shorestPath计算两个节点间经过的节点数最小的路径(不考虑节点之间的权重),dijkstra计算两个节点之间权重最小的路径。

//节点之间的最短路径,计算两点之间的经过节点数最小的路径,无关关系的权重
        PathFinder<Path> finder = GraphAlgoFactory.shortestPath(Traversal.expanderForTypes(RelTypes.KNOWS, Direction.OUTGOING), 5);
        Node startNode = this.graphDb.getNodeById(14);
        Node endNode = this.graphDb.getNodeById(17);
        //将经过的节点数相同的路径全部查询回来
        Iterable<Path> paths = finder.findAllPaths(startNode, endNode);
        Iterator<Path> iterator = paths.iterator();
        Path p;
        while(iterator.hasNext()) {
            p = iterator.next();
            System.out.println("shortestPath" + p.toString());
            System.out.println(p.startNode().getId() + "\t" + p.endNode().getId());
        }

        //取所有路径中的第一条
        p = finder.findSinglePath(startNode, endNode);
        System.out.println("shorestPath singlePath :" + p.toString());

        PathFinder<WeightedPath> finder1 = GraphAlgoFactory.dijkstra(
                Traversal.expanderForTypes( RelTypes.KNOWS, Direction.BOTH ), "weight" );

        WeightedPath path = finder1.findSinglePath(startNode, endNode);

        // Get the weight for the found path
        System.out.println(path.weight());
        System.out.println(path.toString());
时间: 2024-10-18 03:37:18

java连接neo4j之内嵌式的相关文章

java连接neo4j之jdbc

neo4j连接java目前主要有嵌入式.jdbc和rest api. jdbc:需要使用到的lib包:neo4j-jdbc-2.0.1-SNAPSHOT-jar-with-dependencies.jar Connection con = DriverManager .getConnection("jdbc:neo4j://localhost:7474/"); //创建连接 String query = "start n = node({1}) return n.name&q

Java连接Neo4j的两种方式

1.Neo4j数据库的两种方式 Neo4j可以以两种方式运行: Java应用程序中的嵌入式数据库 通过REST的独立服务器 不管哪一种方式,这个选择不会影响查询和使用数据库的方式. 它是由应用程序的性质(无论是独立服务器还是客户端服务器),性能,监视和数据安全性驱动的架构选择. 1.1Neo4j Server(服务器式数据库) Neo4j Server是互操作性,安全性和监控的最佳选择. 实际上,REST接口允许所有现代平台和编程语言与它进行互操作. 此外,作为独立应用程序,它比嵌入式配置更安全

java连接neo4j之rest api

neo4j连接java目前主要有嵌入式.jdbc和rest api. 以neo4j文档的Jersey为例(实际有多种方式可以实现,目前觉得Jersey实现比较麻烦点,其他的都有封装好请求). 使用的lib包:jersey-bundle-1.17.jar(这个比较不好找)和Jersey提供的包 String SERVER_ROOT_URI = "http://localhost:7474/db/data/"; final String nodeEntryPointUri = SERVER

JAVA连接ACCESS、MYSQL、SQLSEVER、ORACLE数据库

. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity)是Java语言为了支持SQL功能而提供的与数据库连接的用户的接口,JDBC中包括了一组由(Java)语言书写的接口和类,它们都是独立于特定的DBMS,或者说他们可以和各种数据库相关联. 1.2 JDBC用途 JDBC由一组Java语言编写的类和接口组成,使用内嵌式的SQL,主要实现三方面功能:建立于数据库的链接,执行SQL声明以及处理SQL执行结果:JDBC支持基本的SQL功能,使用它可以方便地与不同

Java NIO实现非阻塞式socket通信

博主知识水平有限,只能提供一个个人的狭隘的理解,如果有新人读到这儿,建议看一下其他教程或者API,如果不明白,再来看一下:如果有dalao读到这儿,希望能指出理解中的问题~谢谢 Java提供了用于网络通信的socket和serversocket包,然而实现方式是阻塞式的,同一时间点上只能进行一个连接,这会带来不好的体验.当然了,我们也可以通过不断创建线程的方式管理连接,但线程多了的话反而会降低效率.于是Java推出了非阻塞式IO--channel.并且channel提供关于网络通信的相关chan

使内嵌式jetty服务器支持jsp

1.jetty是什么 jetty是一个轻量级的web服务器,类似tomcat,但用起来比tomcat灵活,尤其是支持内嵌式使用.所谓内嵌式即以java语句的形式启动jetty,这样我们可以无需部署和启动web容器就能达到同样的效果.这对于简单的基于http协议的应用以及调试程序就方便的多了. 2.一个简单的jetty服务器 简单到仅需类似以下几条语句: public class JettySample { public static void main(String[] args)throws 

Java基础:非阻塞式IO

转载请注明出处:jiq?钦's technical Blog 引言 JDK1.4中引入了NIO,即New IO,目的在于提高IO速度.特别注意JavaNIO不完全是非阻塞式IO(No-Blocking IO),因为其中部分通道(如FileChannel)只能运行在阻塞模式下,而其他的通道可以在阻塞式和非阻塞式之间进行选择. 尽管这样,我们还是习惯将Java NIO看作是非阻塞式IO,而前面介绍的面向流(字节/字符)的IO类库则是非阻塞的,详细来看,两者区别如下: IO NIO 面向流(Strea

Java 连接池的工作原理(转)

原文:Java 连接池的工作原理 什么是连接? 连接,是我们的编程语言与数据库交互的一种方式.我们经常会听到这么一句话“数据库连接很昂贵“. 有人接受这种说法,却不知道它的真正含义.因此,下面我将解释它究竟是什么.[如果你已经知道了,你可以跳到它的工作原理部分] 创建连接的代码片段: String connUrl = "jdbc:mysql://your.database.domain/yourDBname"; Class.forName("com.mysql.jdbc.Dr

Java进阶(二十五)Java连接mysql数据库(底层实现)

Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜索.特将之前使用的方法做一简单的总结.也能够在底层理解一下连接数据库的具体步骤. 实现 首先需要导入相关的jar包,我使用的为:mysql-connector-java-5.1.7-bin.jar. 下面来看一下我所使用的数据库连接方法类: MysqlUtil.java package cn.edu