使用docker安装OrientDB 以及java连接

本文详细介绍了如何在MacOSX上使用Docker安装OrientDB,包括登陆操作页面、创建数据库的基本步骤。同时,文章探讨了OrientDB的基本语法特性,如不支持JOIN、投影的可选项以及不使用HAVING关键字的情况,并提供了Java连接OrientDB的示例代码,帮助开发者更好地理解和应用OrientDB。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OrientDB

Getting-Started:https://www.orientdb.org/getting-started

一、MacOSX安装OrientDB

使用docker安装:

docker run -d --name orientdb -p 2424:2424 -p 2480:2480 -e ORIENTDB_ROOT_PASSWORD=root orientdb:latest

docker操作命令

# 停止容器
docker stop orientdb
# 开启容器
docker start orientdb
# 查看日志 tail后跟需要看的日志数量信息 使用ctrl+C退出日志
docker logs -tf --tail 50 orientdb

二、OrientDB基本操作

1、登陆操作页面

docker中orientDB容器在运行时,输入:

http://localhost:2480/studio/index.html

即可进入orientdb操作页面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NvFRG0mN-1600863812724)(/Users/yangbohan/Library/Application Support/typora-user-images/image-20200922151324802.png)]

2、创建数据库 Create a DB

点击NEW DB

新建名字为Mydb,用户名为root,密码为root的DB,点击CREATE DATABASE

尝试输入

SELECT * FROM OUser

并点击RUN按钮,可以得到如下结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cBtPZEwE-1600863812728)(/Users/yangbohan/Library/Application Support/typora-user-images/image-20200922151732781.png)]

3、OrientDB基本语法

  • 除了以下的差别,OrientDB的语法与SQL的语法差不多
3.1 没有JOIN

OrientDB与传统关系型数据库的最大差别是关系用LINKS来表示而不是用JOINS来表示。所以传统的JOIN语法在OrientDB中不被支持

在sql中,可以通过如下的代码创造一个Join

SELECT *
FROM Employee A, City B
WHERE A.city = B.id
AND B.name = 'Rome'

在OrientDB中,一个相等的操作如下:

SELECT * FROM Employee WHERE city.name = 'Rome'

这样变得更方便,方法更强大了。

3.2 投影

在SQL中,投影是强制性的并且可以用*来显示所有的行。在OrientDB中*是可选的。

传统SQL语句中,查询Customer所有的列语句如下:

SELECT * FROM Customer

而OrientDB中,*可以不写

SELECT FROM Customer
3.3 不支持HAVING关键字

OrientDB不支持HAVING关键字,但是要得到同样的结果也很方便。

SQL中的例子:

SELECT city, sum(salary) AS salary
FROM Employee
GROUP BY city
HAVING salary > 1000

这个SQL语句把所有的工资通过城市分类,并且提取出工资总和超过1000的结果。在OrientDB中表达式如下:

SELECT FROM ( SELECT city, SUM(salary) AS salary FROM Employee GROUP BY city ) WHERE salary > 1000

三、 Java连接OrientDB

使用Idea,新建maven项目,在pom.xml文件中加入依赖

<project>
	...
  <dependencies>
    ...
    <dependency>
      <groupId>com.orientechnologies</groupId>
      <artifactId>orientdb-client</artifactId>
      <version>3.1.2</version>
    </dependency>
    ...
  </dependencies>
	...
</project>

在/src/main/java下新建一个java class类,名称为OrientDB_Demo.java

写下

import com.orientechnologies.orient.core.db.ODatabaseSession;
import com.orientechnologies.orient.core.db.OrientDB;
import com.orientechnologies.orient.core.db.OrientDBConfig;
import com.orientechnologies.orient.core.metadata.schema.OClass;
import com.orientechnologies.orient.core.metadata.schema.OType;
import com.orientechnologies.orient.core.record.OEdge;
import com.orientechnologies.orient.core.record.OVertex;
import com.orientechnologies.orient.core.sql.executor.OResult;
import com.orientechnologies.orient.core.sql.executor.OResultSet;

import java.util.HashMap;
import java.util.Map;

public class OrientDB_Demo {

    public static void main(String[] args) {

        OrientDB orient = new OrientDB("remote:localhost", OrientDBConfig.defaultConfig());
        ODatabaseSession db = orient.open("Mydb", "root", "root");

        createSchema(db);

        createPeople(db);

        executeAQuery(db);

        executeAnotherQuery(db);

        db.close();
        orient.close();

    }

    private static void createSchema(ODatabaseSession db) {
        OClass person = db.getClass("Person");

        if (person == null) {
            person = db.createVertexClass("Person");
        }

        if (person.getProperty("name") == null) {
            person.createProperty("name", OType.STRING);
            person.createIndex("Person_name_index", OClass.INDEX_TYPE.NOTUNIQUE, "name");
        }

        if (db.getClass("FriendOf") == null) {
            db.createEdgeClass("FriendOf");
        }

    }

    private static void createPeople(ODatabaseSession db) {
        OVertex alice = createPerson(db, "Alice", "Foo");
        OVertex bob = createPerson(db, "Bob", "Bar");
        OVertex jim = createPerson(db, "Jim", "Baz");

        OEdge edge1 = alice.addEdge(bob, "FriendOf");
        edge1.save();
        OEdge edge2 = bob.addEdge(jim, "FriendOf");
        edge2.save();
    }

    private static OVertex createPerson(ODatabaseSession db, String name, String surname) {
        OVertex result = db.newVertex("Person");
        result.setProperty("name", name);
        result.setProperty("surname", surname);
        result.save();
        return result;
    }

    private static void executeAQuery(ODatabaseSession db) {
        String query = "SELECT expand(out('FriendOf').out('FriendOf')) from Person where name = ?";
        OResultSet rs = db.query(query, "Alice");

        while (rs.hasNext()) {
            OResult item = rs.next();
            System.out.println("friend: " + item.getProperty("name"));
        }

        rs.close(); //REMEMBER TO ALWAYS CLOSE THE RESULT SET!!!
    }

    private static void executeAnotherQuery(ODatabaseSession db) {
        String query =
                " MATCH                                           " +
                        "   {class:Person, as:a, where: (name = :name1)}, " +
                        "   {class:Person, as:b, where: (name = :name2)}, " +
                        "   {as:a} -FriendOf-> {as:x} -FriendOf-> {as:b}  " +
                        " RETURN x.name as friend                         ";

        Map<String, Object> params = new HashMap<String, Object>();
        params.put("name1", "Alice");
        params.put("name2", "Jim");

        OResultSet rs = db.query(query, params);

        while (rs.hasNext()) {
            OResult item = rs.next();
            System.out.println("friend: " + item.getProperty("friend"));
        }

        rs.close();
    }

}

具体参照http://www.orientdb.org/docs/3.0.x/fiveminute/java.html

得到如下结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZUHN3Lkk-1600863812730)(/Users/yangbohan/Library/Application Support/typora-user-images/image-20200923201204891.png)]

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值