Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 密码查询:-允许在查询中包含字符串的撇号(';)_Java_Neo4j_Cypher - Fatal编程技术网

Java 密码查询:-允许在查询中包含字符串的撇号(';)

Java 密码查询:-允许在查询中包含字符串的撇号(';),java,neo4j,cypher,Java,Neo4j,Cypher,我们在代码中通过在查询语法中连接字符串来创建查询,就像创建节点一样,查询中的所有属性都是在运行时添加的 查询在代码中是这样的,其中 nodeLabel=String properties=JSONObject 执行查询创建时出错(n:quick{name:“1506077464525”,createtime:1506077464525,title:“伯努利理论”,持续时间:15,隐私:“follower”,status:“draft”})返回n和参数{} 因为它不允许在java代码的查询中使用撇

我们在代码中通过在查询语法中连接字符串来创建查询,就像创建节点一样,查询中的所有属性都是在运行时添加的

查询在代码中是这样的,其中

nodeLabel=String

properties=JSONObject

执行查询创建时出错
(n:quick{name:“1506077464525”,createtime:1506077464525,title:“伯努利理论”,持续时间:15,隐私:“follower”,status:“draft”})返回n和参数{}
因为它不允许在java代码的查询中使用撇号(')

在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();
        }
错误:-执行查询匹配(n{name:'1506160405300})集n.{1}时出错 返回n.name,参数为{1=n.title=Asjdkjsbd's}at org.neo4j.jdbc.Neo4jConnection.executeQuery(Neo4jConnection.java:372) 在 org.neo4j.jdbc.Neo4jPreparedStatement.executeQuery(Neo4jPreparedStatement.java:46) 在 com.edubot.server.neo4jquerys.updateNodeProperty1(neo4jquerys.java:622) 在 com.edubot.server.course.courseneo4jquerys.updateCourseTitle(courseneo4jquerys.java:490) 在 com.edubot.server.course.CourseServiceImpl.updateCourseTitle(CourseServiceImpl.java:1215) 位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 位于的sun.reflect.NativeMethodAccessorImpl.invoke(未知源) sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)位于 java.lang.reflect.Method.invoke(未知源代码)位于 com.google.gwt.user.server.rpc.rpc.invokeAndEncodeResponse(rpc.java:587) 在 com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:333) 在 com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:303) 在 com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:373) 在 com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:648) http.HttpServlet.service(HttpServlet.java:729)位于 org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812) 在 ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) 位于com.edubot.server.CORSFilter.doFilter(CORSFilter.java:51) ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 在 org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 在 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 在 org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 位于org.eclipse.jetty.server.server.handle(server.java:499) org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)位于 org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 在 org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 在 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 在java.lang.Thread.run(未知源)处,由以下原因引起: java.lang.IllegalArgumentException:无法序列化值1 n、 title=Asjdkjsbd位于 org.neo4j.jdbc.rest.JsonUtils.serialize(JsonUtils.java:101)位于 org.neo4j.jdbc.rest.Statement.toJson(Statement.java:48)位于 org.neo4j.jdbc.rest.Statement.toJson(Statement.java:68)位于 org.neo4j.jdbc.rest.TransactionalQueryExecutor.post(TransactionalQueryExecutor.java:112) 在 org.neo4j.jdbc.rest.TransactionalQueryExecutor.commit(TransactionalQueryExecutor.java:135) 在 org.neo4j.jdbc.rest.TransactionalQueryExecutor.ExecuteSeries(TransactionalQueryExecutor.java:198) 在 org.neo4j.jdbc.rest.TransactionalQueryExecutor.executeQuery(TransactionalQueryExecutor.java:208) 在 org.neo4j.jdbc.Neo4jConnection.executeQuery(Neo4jConnection.java:363) ... 38多


下面是我用来将字符串转换为密码安全带引号字符串的函数。你这样做很容易被注射。这将捕获代码中的实际错误

if (!str.contains("\"")) {
    str= '"' + str + '"';
} else if (!str.contains("'")) {
    str= "'" + str + "'";
} else {
    str= '"' + str.replaceAll("\"", "\"+'\"'+\"").replaceAll("\\+\"\"|\"\"\\+", "") + '"';
}
  • 对于标签,请按所述使用反勾号(`)

  • 您可以将属性打包到一个Java映射并保存。如果您使用的是Java驱动程序,这里是

    请注意,3.2版中的参数语法发生了更改-参数文档页面提供了更多信息


  • 你能包括实际的错误信息吗?那个查询是你的代码生成的密码的打印输出吗?我提供了一个答案,可以解决密码字符串中的所有“”问题。
    if (!str.contains("\"")) {
        str= '"' + str + '"';
    } else if (!str.contains("'")) {
        str= "'" + str + "'";
    } else {
        str= '"' + str.replaceAll("\"", "\"+'\"'+\"").replaceAll("\\+\"\"|\"\"\\+", "") + '"';
    }