下面介绍一下如何在java中使用neo4j图形数据库。

这里是neo4j中文的官方教程

这里是neo4j的api文档

第一步

首先在eclipse项目中引入neo4j的全部jar包,在项目上右键Property--> Java Build Path-->Libraries-->Add External Jars-->OK    neo4j的jar包在根目录下的lib。

第二步

代码部分

为了创建或者使用一个已存在的数据库,我们要实例化一个EmbeddedGraphDatabase对象。

private static final String DB_PATH = "/Users/yangfan/Downloads/neo4j-community-2.0.2/data/graph.db";

graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);

registerShutdownHook(graphDb);

DB_PATH是数据库的路径,为了确保neo4j数据库的正确关闭,我们可以添加一个关闭钩子方法registerShutdownHook。这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。

下面是对neo4j数据库中添加数据,因为之前的数据我全部都存在mysql数据库中,我要从mysql数据库中读取,然后转存到neo4j数据库中。这里对mysql的连接和获取不做过多介绍,直接不如正题。

在存储数据的时候,基本会用到这几个参数

GraphDatabaseService graphDb;

Node firstNode;

Node secondNode;

Relationship relationship;

Transaction tx;

node是图形数据库的节点,relationship是节点之间的关系,Transaction是事务处理所有的写操作,包括添加,修改,删除都需要在事务中进行。

Transaction tx = graphDb.beginTx();

try

{

// Updating operations go here

tx.success();

}

finally

{

tx.finish();

}

下面是数据存储

private static enum RelTypes implements RelationshipType {

KNOWS };

Node firstNode = graphDb.createNode();

Node secondNode = graphDb.createNode();

firstNode.setProperty("message", proA);

secondNode.setProperty("message", proB);

Relationship relationship = firstNode.createRelationshipTo(

secondNode, RelTypes.KNOWS);

relationship.setProperty("message", property);

可以先用枚举类型定义节点间的关系,然后对节点和关系添加属性和属性值。

一般情况下,我们都需要在数据库中添加索引这样可以加快下一次查询的速度,neo4j中也继承了索引功能。

nodeIndex = graphDb.index().forNodes("nodes");

nodeIndex.add(firstNode, "message",proA);

nodeIndex.add(secondNode, "message",proB);

在我们创建好节点和关系之后,将节点和之后按照节点中的哪个属性进行索引添加到nodeIndex中。

同时也可以对节点添加标记(label),label的作用是当需要对图添加约束并且对属性加索引时。当某些节点被label时,这些节点就被映射到一个集合当中,当你下次查询某个特定的label,将返回被标记的所有节点,可以批量查询和修改。

Label label = DynamicLabel.label("node");

firstNode.addLabel(label);

secondNode.addLabel(label);

下面是对node的查询,可以利用索引查询

Index indexService = indexManager.forNodes("nodes");

IndexHits hit =indexService.get( "message",proA);

Node node = hit.getSingle();

也可以根据id和label进行node查询

graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);

Label label = DynamicLabel.label("node");

graphDb.findNodesByLabelAndProperty(label, "message", proA);

graphDb.getNodeById(1000);

neo4j中关系基本需要靠node来查询,因为每个节点对应的关系不一样,但是可以查询存在的所有关系的类型和根据关系的id来查询。

graphDb.getRelationshipById(1000);

graphDb.getRelationshipTypes();

常用的基本就是这些,有需要可以自行查询api 文档。

之后会和大家分享neo4j中对图的遍历和封装的一些图算法。

分享到:

2014-04-28 14:28

浏览 6097

分类:数据库

评论

java查询neo4j_Java中使用neo4j--创建和查询相关推荐

  1. JAVA报表工具中更为动态的SQL查询(FineReport)

    在用Web报表工具查询数据时,经常会遇到查询条件不定的情况,例如参数过滤列是动态变化的:有时想用A列进行过滤,有时想用B列进行过滤.在FineReport报表中,可以将整个查询条件作为参数传入sql中 ...

  2. kafka中topic的创建和查询

    启动 kafka的启动依赖zookeeper,先启动zookeeper,再启动kafka bin/zookeeper-server-start.sh config/zookeeper.properti ...

  3. django orm关联查询_django中orm的多表查询

    一.创建模型 下面我们通过图书管理系统,来设计出每张表之间的对应关系. 通过上图关系,来定义一下我们的模型类. from django.db import models class Book(mode ...

  4. mysql在查询结果中添加数据_MySQL将查询结果插入到数据表中

    转自Mysql教程:http://www.baike369.com/content/?id=5582 MySQL将查询结果插入到数据表中 INSERT语句还可以将SELECT语句查询出来的数据插入到另 ...

  5. PHP中文无法查询,php 中htmlentities导致中文无法查询问题

    在php中htmlspecialchars, 将特殊字元转成 HTML 格式,而htmlentities,将所有的字元都转成 HTML 字串 了,下面我来分别简单的介绍. htmlentities用法 ...

  6. c#sql防注入模糊查询_SQL中利用LIKE实现模糊查询的功能

    大家好,今日继续讲解<VBA数据库解决方案>,今日讲解的内容是:利用ADO,实现模糊查询.在上一讲中,我们实现了利用ADO快速查找的功能,今日我们实现工作表中模糊查找的功能.我们仍是利用上 ...

  7. mysql语言中子查询是什么_SQL查询语句中,什么叫子查询?

    展开全部 嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句3231313335323631343130323136353 ...

  8. 学校的校园景点平面图(校园景点迷你地图C++数据结构)(查询图中顶点间的最短路径查询图中任意两个顶点间的所有路径)

    学校的校园景点平面图(校园景点迷你地图C++&数据结构) 设计要求: (1)建图 以图中顶点表示主要景点,并存放景点的编号.名称.简介等信息: (2)查询 该系统可以查询景点的信息: 查询图中 ...

  9. Java和Spring中线程池创建方法

    一.线程池定义 1.JDK中线程池类图 Executor:父接口,所有线程池都实现了这个接口,里面有一个excute()方法用于执行线程 ExecutorService:线程池接口,继承自Execut ...

最新文章

  1. 面试官问:Kafka 会不会丢消息?怎么处理的?
  2. keil添加hal库_使用Keil uVision5创建stm32 hal库项目过程
  3. 自己动手制作(DIY)一个Mini-Linux系统
  4. MySQL 处理重复数据
  5. 【kibana】kibana 7.* 设置中文 汉化
  6. [渝粤教育] 广东-国家-开放大学 21秋期末考试财务会计(二)10165k2
  7. 23种设计模式(二)组件协作之模板方法
  8. 元胞自动机生命游戏C语言并行实现
  9. 10本编程书籍推荐!带你从入门到精通
  10. [含论文+ppt+任务书+源码等]S2SH基于java的保险业务管理系统
  11. 【转】小谈PNG转SVG的方法 在线转换网站与illustrator
  12. wordpress目录文件结构
  13. ReclyclerView刷新数据
  14. 量子能--下一代能源革命
  15. 《人类简史》1.0-三概念:肌肉+两性+恶性循环案例(大花猫冯夏)
  16. 关于Mybatisplus查询到字段无法映射的问题
  17. vs + BabeLua + Cocos2d-x 3.10配置
  18. Ubuntu 下安装 苹果主题界面Mac Sierra Theme
  19. hjr-MUD游戏(五):字符串与二进制与protobuf通信
  20. java微信获取用户信息接口_java微信接口之二—获取用户组

热门文章

  1. appvlv中偶有不爽
  2. 软件测试行业中ta表示什么意思,温度冲击测试ta/tc分别代表什么意思
  3. 嵌入式系统设计有哪几个方向
  4. 召集令-3000人大集合
  5. 三种方法获取列表长度
  6. 18天精读掌握《费曼物理学讲义卷一》 第4天 2019.6.17
  7. ssh登录报no matching MAC found. Their offer: hmac-sha2-512异常
  8. Java实现圆面积计算
  9. 对企业数字化转型的思考
  10. 网页webview适应手机分辨率