如何使用neo4j-jdbc连接到Neo4j 3.0数据库?

时间:2016-07-27 13:43:03

标签: java maven jdbc neo4j

您好,

我在eclipse中创建了一个maven项目并添加了依赖项:

<dependency>
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-jdbc</artifactId>
    <version>3.0</version>
</dependency>

我只是想尝试连接到我的数据库工作,以便我可以继续将连接与我的主项目集成,但我无法解决问题。

我使用了官方回购中的代码示例:

import org.neo4j.jdbc.Connection;
import org.neo4j.jdbc.PreparedStatement;
import org.neo4j.jdbc.ResultSet;

public class Neo4jConnectionTest {

    public static void main(String[] args) {
        // Connect
        Connection con = DriverManager.getConnection(
                                        "jdbc:neo4j:bolt://localhost");

        // Querying
        String query = "MATCH (u:User)-[:FRIEND]-(f:User) 
                        WHERE u.name = {1} 
                        RETURN f.name, f.age";
        try {
            PreparedStatement stmt = con.prepareStatement(query);
            stmt.setString(1,"John");
            ResultSet rs = con.execute();

            while (rs.next()) {
                System.out.println(
                    "Friend: "+rs.getString("f.name")+" is "+rs.getInt("f.age"));
            }
        } catch (Exception e) { e.printStackTrace(); }
        con.close();
    }
}

我无法将其编译为:

DriverManager无法在neo4j-jdbc-3.0中解析,

Prepared stmt = con.prepareStatement(query);会导致类型不匹配,

类型con.execute()

未定义

org.neo4j.jdbc.Connection

非常感谢有关此事的任何建议和专业知识,谢谢。

2 个答案:

答案 0 :(得分:2)

改为:

<dependency>
    <groupId>org.neo4j.driver</groupId>
    <artifactId>neo4j-java-driver</artifactId>
    <version>1.0.4</version>
</dependency>

我能够使用Neo4j网站上的一个例子成功连接到Neo4j 3.0服务器:

public static void main(String[] args) {
    Driver driver = GraphDatabase.driver( 
        "bolt://localhost", AuthTokens.basic( "neo4j", "neo4j" ) );
    Session session = driver.session();

    session.run( "CREATE (a:Person {name:'Arthur', title:'King'})" );

    StatementResult result = session.run( 
                                        "MATCH (a:Person) 
                                         WHERE a.name = 'Arthur' 
                                         RETURN a.name AS name, a.title AS title");

    while ( result.hasNext() ) {
        Record record = result.next();
        System.out.println( record.get( "title" ).asString() + 
                                " " + record.get("name").asString() );
    }

    session.close();
    driver.close();
}

我以为我会分享,因为这样可以立即解决问题。

Neo4j Language Guides

答案 1 :(得分:1)

DriverManagerConnectionPreparedStatementResultSet都是来自java.sql包的类或接口,它是JDK的一部分。我想文档假设您将使用IDE,它将为您找到正确的导入。

这是使用JDBC驱动程序的重点:您使用的是JDBC API,而不是专有的(即在供应商包中)。

<强>更新

neo4j-jdbc自述文件中有一个拼写错误,它应该已读取

ResultSet rs = stmt.execute();

而不是

ResultSet rs = con.execute();

否则PreparedStatement没有使用(并且代码无法编译,因为Connection.execute()没有no-arg重载。)

更新2

记录的依赖项也是错误的,因为neo4j-jdbc不包含任何驱动程序。

你应该依赖:

  • 一体化模块,让您有机会使用Bolt或HTTP协议:

    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-jdbc-driver</artifactId>
        <version>3.0</version>
    </dependency>
    
  • 或特定协议的模块:

    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-jdbc-bolt</artifactId>
        <version>3.0</version>
    </dependency>
    <!-- or -->
    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-jdbc-http</artifactId>
        <version>3.0</version>
    </dependency>
    

更新3

现在已经在项目文档中修复了这两个问题。