neo4j-jdbc 驱动程序最小可行片段,不确定如何解决依赖关系

neo4j-jdbc driver minimal viable snippet, unsure how to resolve dependancies

我在获取 Neo4J-jdbc 驱动程序的最小可行代码段时遇到问题。我正在使用 gradle 的 intelliJ idea。当我import org.neo4j.jdbc.*;时,DriverManager无法解析,出现多次Unhandled Exception: java.sql.SQLException。当我 import java.sql.* 时,出现更多 java.sql.SQLException 错误。当我同时导入这两个库时,出现多个错误,因为两个库之间的引用不明确。

官方文档中的最小可行代码片段如下:

// Connecting
try (Connection con = DriverManager.getConnection("jdbc:neo4j:bolt://localhost", 'neo4j', password)) {

    // 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");

        try (ResultSet rs = stmt.execute()) {
            while (rs.next()) {
                System.out.println("Friend: "+rs.getString("f.name")+" is "+rs.getInt("f.age"));
            }
        }
    }
}

Gradle 依赖关系:

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.neo4j', name: 'neo4j-jdbc-bolt', version: '3.1.0'
    compile 'com.sparkjava:spark-core:2.3'
}

我真的想在这里寻找一个最小的实现,我只是想知道我错过了什么才能让最小的代码段正常工作。

您需要导入 java.sql.* 那就是 all.Yes 您将有一些 SQLException,但您只需要在 catch 中处理它们或通过添加例外在你的方法签名中(如下所示)。

片段中有一个错误,stmt.execute() returns 是 boolean 而不是 ResultSet,因此您需要将其替换为 stmt.executeQuery().

这是一个 complete/working 示例:

import java.sql.*;

public class JDBCTest {

  public static void main() throws SQLException {

        // Connecting
        try (Connection con = DriverManager.getConnection("jdbc:neo4j:bolt://localhost", "neo4j", "admin")) {

            // 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");

                try (ResultSet rs = stmt.executeQuery()) {
                    while (rs.next()) {
                        System.out.println("Friend: "+rs.getString("f.name")+" is "+rs.getInt("f.age"));
                    }
                }
            }
        }
    }
}