有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用neo4jjdbc连接到Neo4j 3.0数据库?

你好,

我在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);导致类型不匹配

类型org.neo4j.jdbc.Connectioncon.execute()未定义

我非常感谢您对此事的建议和专业知识,谢谢


共 (2) 个答案

  1. # 1 楼答案

    改为:

    <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

  2. # 2 楼答案

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

    使用JDBC驱动程序的意义在于:您使用的是JDBC API,而不是专有API(即在供应商包中)


    更新

    neo4j jdbc自述文件中有一个输入错误,应该是这样的

    ResultSet rs = stmt.execute();
    

    而不是

    ResultSet rs = con.execute();
    

    否则PreparedStatement就没有使用(代码不会编译,因为Connection.execute()没有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

    这两个问题现在都已在项目文件中得到解决