2017-09-22 12 views
0

クエリの構文内の文字列を連結して、クエリ内のすべてのプロパティが実行時に追加されるようにします。Cypherクエリ: - クエリに文字列を含むアポストロピック( ')を許可する

The query is like this in the code where

nodeLabel =String

properties = JSONObject

String query = "CREATE (n:" + nodeLabel + "{" + properties 
        + "}) RETURN n"; 

クエリ実行エラーのは、Javaコードでクエリでアポストロフィ( ')を許可していないので、(n:quiz{name:"1506077464525",createtime:1506077464525,title:"bernoulli's theory",duration:15,privacy:"follower",status:"draft"}) return n with params {} を作成します。

neo4jブラウザで同じクエリが実行されていますが、コードを試行しても同じクエリは実行されません。

この問題を解決し、同じ問題を解決する方法。


問題2: - ノードのプロパティを更新すると発生同じ問題。

私はコード化しようとしましたが、それは私にシリアル化のエラーを与えます。ここで

Connection connect = null; 
    int status = 00; 
    try { 
     connect = graphdbConnect(); 
     StringBuilder sb = new StringBuilder(); 
     for (Object key : propertiesMap.keySet()) { 

      if (sb.length() != 0) { 
       sb.append(","); 
      } 
       sb.append("n." + key + " = " + propertiesMap.get(key)); 

       System.out.println(sb); 
     } 

     String query = "match (n{name:'" + nodeName + "'}) set {1}" 
       + " return n.name"; 

     query=query.toLowerCase(); 

     try (PreparedStatement preparedStatement = connect.prepareStatement(query)){ 

      preparedStatement.setObject(1,sb); 
      System.out.println(query+" ---> query"); 
      preparedStatement.executeQuery(); 
      status = ServerStatusReport.OK(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 

Error:-Error executing query match (n{name:'1506160405300'}) set n.{1} return n.name with params {1=n.title = Asjdkjsbd's} at org.neo4j.jdbc.Neo4jConnection.executeQuery(Neo4jConnection.java:372) at org.neo4j.jdbc.Neo4jPreparedStatement.executeQuery(Neo4jPreparedStatement.java:46) at com.edubot.server.Neo4jQueries.updateNodeProperty1(Neo4jQueries.java:622) at com.edubot.server.course.CourseNeo4jQueries.updateCourseTitle(CourseNeo4jQueries.java:490) at com.edubot.server.course.CourseServiceImpl.updateCourseTitle(CourseServiceImpl.java:1215) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:587) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:333) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:303) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:373) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) at com.edubot.server.CORSFilter.doFilter(CORSFilter.java:51) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) at org.eclipse.jetty.server.Server.handle(Server.java:499) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.IllegalArgumentException: Could not serialize value 1 n.title = Asjdkjsbd's at org.neo4j.jdbc.rest.JsonUtils.serialize(JsonUtils.java:101) at org.neo4j.jdbc.rest.Statement.toJson(Statement.java:48) at org.neo4j.jdbc.rest.Statement.toJson(Statement.java:68) at org.neo4j.jdbc.rest.TransactionalQueryExecutor.post(TransactionalQueryExecutor.java:112) at org.neo4j.jdbc.rest.TransactionalQueryExecutor.commit(TransactionalQueryExecutor.java:135) at org.neo4j.jdbc.rest.TransactionalQueryExecutor.executeQueries(TransactionalQueryExecutor.java:198) at org.neo4j.jdbc.rest.TransactionalQueryExecutor.executeQuery(TransactionalQueryExecutor.java:208) at org.neo4j.jdbc.Neo4jConnection.executeQuery(Neo4jConnection.java:363) ... 38 more

+0

実際のエラーメッセージを挿入できますか?そして、あなたのコードが生成するCypherのプリントアウトをクエリしますか?私はCypher Stringsのすべての問題を捉えるべき答えを提供しました。 – Tezra

答えて

1
  1. docs on label namesによって記載されるようにバッククォート( `)を使用します。

  2. Javaマップとpass it as a parameterにプロパティをパックできます。 Javaドライバを使用している場合は、how to pass parametersです。

    バージョン3.2で変更されたパラメータ構文 - パラメータdocsページには詳細情報があります。

0

私はサイファー・安全な引用符で囲まれた文字列に文字列を変換するために使用する機能です。あなたがそれをやっているやり方は注射に弱いです。これはあなたのコードの実際のエラーが何であれキャッチする必要があります。ラベルの

if (!str.contains("\"")) { 
    str= '"' + str + '"'; 
} else if (!str.contains("'")) { 
    str= "'" + str + "'"; 
} else { 
    str= '"' + str.replaceAll("\"", "\"+'\"'+\"").replaceAll("\\+\"\"|\"\"\\+", "") + '"'; 
} 
関連する問題