【问题标题】:cypher query using java execution使用 java 执行的密码查询
【发布时间】:2014-03-28 10:35:26
【问题描述】:
Following is the java program which connects to NEO4J . it is not properly conneting executing cypher queries. Your help at the earliest

表示赞赏。

        import java.util.Iterator;
        import java.util.Map;
        import java.util.Map.Entry;

        import javax.xml.soap.Node;

        import org.neo4j.graphdb.PropertyContainer; 
        import org.neo4j.graphdb.Transaction;

        import org.apache.struts2.interceptor.SessionAware;
        import org.neo4j.cypher.CypherParser;
        import org.neo4j.cypher.ExecutionEngine;
        import org.neo4j.cypher.javacompat.ExecutionResult;
        import org.neo4j.graphdb.GraphDatabaseService;
        import org.neo4j.graphdb.factory.GraphDatabaseFactory;
        import org.neo4j.kernel.EmbeddedGraphDatabase;

        import com.opensymphony.xwork2.ActionSupport;

        public class arch extends ActionSupport implements SessionAware
        {
        String S;

        private static final String DB_PATH = "/home/mkgs/Desktop/placement/";
        GraphDatabaseService graphDb;

        private static final long serialVersionUID = 1L;


        private String pwd;
        public String getPwd() {
          return pwd;
        }

        public void setPwd(String pwd) {
          this.pwd = pwd;
        }

        public String getUsername() {
          return username;
        }

        public void setUsername(String username) {
          this.username = username;
        }

        private String username;

        Map session;


        public String save() throws Exception
        {
          System.out.println("inside save");

          System.out.println("username:"+getUsername());

          System.out.println("pwd:"+getPwd());


          graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);
          Transaction transaction = (Transaction) graphDb.beginTx();
          try {

              ExecutionEngine engine = new ExecutionEngine(graphDb, null);
              ExecutionResult result = (ExecutionResult) engine.execute("START     n=node(*) MATCH n-[r]-m RETURN type(r),

计数()按计数排序() 描述"); System.out.println(结果);

              Iterator<Node> columnAs = result.columnAs("n");
              while(columnAs.hasNext())
              {
                  Node n = (Node)columnAs.next();
                  for (String key : ((PropertyContainer) n).getPropertyKeys()) 
                  {
                      System.out.println("{ " + key + " : " + ((PropertyContainer) n).getProperty(key)+ " } ");
                  }

              }
          }

          finally {
              ((org.neo4j.graphdb.Transaction) transaction).finish();
          }
          return "l";         
        }


        @Override
        public void setSession(Map arg0) {
          // TODO Auto-generated method stub

        }


        }

This is im getting during execution of above code using struts.......


Apr 02, 2014 5:53:27 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the

java.library.path: /usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/server:/usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386:/usr/lib/jvm /java-7-openjdk-i386/jre/../lib/i386:/usr/lib/jvm/java-7-openjdk-i386/jre/lib/i386/client:/usr/lib/jvm/java- 7-openjdk-i386/jre/lib/i386::/usr/java/packages/lib/i386:/usr/lib/i386-linux-gnu/jni:/lib/i386-linux-gnu:/usr/lib /i386-linux-gnu:/usr/lib/jni:/lib:/usr/lib 2014 年 4 月 2 日下午 5:53:27 org.apache.tomcat.util.digester.SetPropertiesRule 开始 警告:[SetPropertiesRule]{Server/Service/Engine/Host/Context} 将属性“源”设置为 'org.eclipse.jst.j2ee.server:placementportal' 没有找到匹配的 财产。 2014 年 4 月 2 日下午 5:53:27 org.apache.coyote.http11.Http11Protocol 初始化 信息:在 http-8080 上初始化 Coyote HTTP/1.1 2014 年 4 月 2 日下午 5:53:27 org.apache.catalina.startup.Catalina 加载 INFO:初始化在 645 毫秒内处理 2014 年 4 月 2 日下午 5:53:27 org.apache.catalina.core.StandardService 开始 信息:启动服务 Catalina 2014 年 4 月 2 日下午 5:53:27 org.apache.catalina.core.StandardEngine 开始 信息:启动 Servlet 引擎:Apache Tomcat/6.0.39 2014 年 4 月 2 日下午 5:53:27 org.apache.catalina.loader.WebappClassLoader validateJarFile 信息:validateJarFile(/home/mkgs/workspace/proj/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/placementportal/WEB-INF/lib/servlet-api.jar) - jar 未加载。请参阅 Servlet 规范 2.3,第 9.7.2 节。违规类:javax/servlet/Servlet.class 2014 年 4 月 2 日下午 5:53:29 org.apache.coyote.http11.Http11协议开始 信息:在 http-8080 上启动 Coyote HTTP/1.1 2014 年 4 月 2 日下午 5:53:29 org.apache.jk.common.ChannelSocket 初始化 信息:JK:ajp13 监听 /0.0.0.0:8009 2014 年 4 月 2 日下午 5:53:29 org.apache.jk.server.JkMain 开始 信息:Jk 运行 ID=0 时间=0/29 配置=空 2014 年 4 月 2 日下午 5:53:29 org.apache.catalina.startup.Catalina 开始 INFO:服务器在 1958 毫秒内启动

【问题讨论】:

  • 如果您需要有关异常的帮助,那么您确实需要在您的问题中提供异常错误消息和堆栈跟踪。
  • 那么,能否请您提供异常错误消息和堆栈跟踪?
  • 也只创建一次图形数据库和执行引擎,并保留它们,否则你不会使用缓存。仍然确保在应用程序结束时正确关闭它

标签: java neo4j


【解决方案1】:

您应该调用 transaction.success(),然后调用 transaction.close()。 Transaction.success() 是提交事务的内容。不确定您实际调用的是什么方法。

以下代码是从我的一个项目中剪切和粘贴的,用于访问嵌入的 GDB。

Transaction tx = graphDb.beginTx();
try{
    ExecutionEngine engine = new ExecutionEngine(graphDb);
    ExecutionResult result = engine.execute("MATCH (n) RETURN n");
    System.out.println(result.dumpToString());
    tx.success();
} finally {
    tx.close();
}

【讨论】:

  • 这并不完全正确。调用success() 将此事务标记为成功,这意味着它将在调用close() 时提交。此外,他正在使用确实提交事务的finish() 方法。 finish() 的使用已被弃用,因此您的方法更好。由于Transaction 实现了AutoClosable,因此在将其添加到java 7 中的try 语句时不必显式关闭它。
  • finish 只在调用成功后提交,否则回滚
  • 我们可以使用 struts 代替 servlet 进行连接吗...???我使用 struts 进行连接...
【解决方案2】:

您的查询是

START n=node(*)
MATCH n-[r]-m
RETURN type(r), count(*)
ORDER BY count(*) DESC

但是您尝试访问列 'n' 并且您没有在 RETURN 子句中提及它。您可能希望将查询更改为以下查询,但这取决于您的用例。

START n=node(*)
MATCH n-[r]-m
RETURN n, type(r), count(*)
ORDER BY count(*) DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多