1. 程式人生 > >java連線neo4j查詢,基於driver

java連線neo4j查詢,基於driver

**下面是java程式碼**
---------

public class Neo4jDrivertest {
// 驅動程式物件是執行緒安全的,通常是在應用程式範圍內提供的。
Driver driver;

public Neo4jDrivertest(String uri, String user, String password) {
    driver = GraphDatabase.driver(uri, AuthTokens.basic(user, password));
}

/**
 * 根據cql語句進行查詢節點,關係線等資料
 *
 * @param cql
 * @return
 */
public Map<String, HashSet<Map<String, Object>>> printJSON(String cql) {
    Map<String, HashSet<Map<String, Object>>> retuMap = new HashMap<String, HashSet<Map<String, Object>>>();
    try  {
        Session session = driver.session();
        StatementResult result = session.run(cql);
        HashSet<Map<String, Object>> nodedatas = new HashSet<Map<String, Object>>();// 存放所有的節點資料
        HashSet<Map<String, Object>> allrelationships = new HashSet<Map<String, Object>>();// 存放所有的節點資料

        while (result.hasNext()) {
            Record record = result.next();
            Map<String, Object> date = record.asMap();// 這裡面存的是這個關係的鍵值對,其實就是起始節點,關係,結束節點
            for (String key : date.keySet()) {
                Object object = date.get(key);
                InternalPath data = (InternalPath) object;// 強制轉換
                Iterable<Node> allnodes = data.nodes();

                for (Node node : allnodes) {
                    long nodeid = node.id();
                    Map<String, Object> nodedatamap = new HashMap<String, Object>();
                    Map<String, Object> data1 = node.asMap();// 新增節點的屬性
                    for (String key1 : data1.keySet()) {
                        nodedatamap.put(key1, data1.get(key1));
                    }
                    nodedatamap.put("name", nodeid);
                    nodedatas.add(nodedatamap);
                }

                Iterable<Relationship> relationships = data.relationships();

                Map<String, Object> shipdata = new HashMap<String, Object>();
                for (Relationship relationship : relationships) {
                    Map<String, Object> data1 = relationship.asMap();// 新增關係的屬性
                    for (String key1 : data1.keySet()) {
                        shipdata.put(key1, data1.get(key1));
                    }
                    long source = relationship.startNodeId();// 起始節點id
                    long target = relationship.endNodeId();// 結束節點Id
                    shipdata.put("source", source);// 新增起始節點id
                    shipdata.put("target", target);
                }
                allrelationships.add(shipdata);
            }
        }
        retuMap.put("nodes", nodedatas);
        retuMap.put("relation", allrelationships);

    } catch (Exception e) {
        e.printStackTrace();
        // TODO: handle exception
    } finally {
        close();
    }
    return retuMap;
}




public void close() {
    // Closing a driver immediately shuts down all open connections.
    driver.close();
}

}
“`