有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Neo4j类型不匹配

我试图在eclipse中编写一个连接到neo4j的JDBC代码。我可以让它连接到数据库,但我在运行查询时遇到了问题。我已经导入了Neo4J驱动程序jar,以及所需的大多数驱动程序导入。尽管如此,我仍然在两个地方遇到了错误:

PreparedStatement statement = conn.prepareStatement(cypher);

给我一个错误:

这条线上有多个标记

- The method prepareStatement(String) is undefined for the type Connection

- Type mismatch: cannot convert from java.sql.PreparedStatement to org.neo4j.jdbc.PreparedStatement

我不明白为什么是java。之所以包含sql,是因为我没有将其导入此类

我的另一个错误在第行:

连接连接=驱动器管理器。getConnection(“jdbc:neo4j:bolt://localhost“,”,”)

我在这里遇到的错误是:无法解决DriverManager

我的代码(未完成)如下。我的问题是,我应该做些什么来帮助解决这些错误

private static void runCypher(Connection conn, String cypher) {
    PreparedStatement statement = conn.prepareStatement(cypher);


}

public static void main (String[] args) {
    try {   
        Connection conn = DriverManager.getConnection("jdbc:neo4j:bolt://localhost", "", "");

        String cypher = "";
        String option = "";
        String instr = "Enter a: Show distinct sids and snames of suppliers who supply a red part or a green part." + "\n"
                + "Enter b: Show distinct sids and snames of suppliers who supply a red part and a green part."
                + "\n" + "Enter c: Insert a new supplier." + "\n"
                + "Enter d:  Quit Program.";

    while (true) {
        option = JOptionPane.showInputDialog(instr);
        if (option.equals("a")) {
            cypher = "match (s:Suppliers)-[:supplies]->(p:Parts) where p.color = ‘red’ or p.color = ‘green’ return distinct s.sid, s.sname;";
            runCypher(conn, cypher);
        } else if (option.equalsIgnoreCase("b")) {
            cypher = "match (p1:Parts)<-[:supplies]-(s:Suppliers)-[:supplies]->(p2:Parts) where p1.color = ‘red’ and p2.color = ‘green’ return distinct s.sid, s.sname;";
            runCypher(conn, cypher);
        } else if (option.equals("c")) {
            cypher = "match (p:Parts)<-[sup:supplies]-(s:Suppliers) return p.pid, p.pname, max(toInteger(sup.cost)) order by p.pid;";
            runCypher(conn, cypher);
        } else {
            break;
        }


    }}catch(Exception e ) {
        System.out.println("Program terminates due to errors");
        e.printStackTrace(); // for debugging
    }
}

我的进口:

import org.neo4j.driver.internal.spi.Connection;
import org.neo4j.driver.v1.StatementResult;
import org.neo4j.jdbc.PreparedStatement;
import org.neo4j.jdbc.ResultSet;
import org.neo4j.jdbc.ResultSetMetaData;

共 (1) 个答案

  1. # 1 楼答案

    错误消息DriverManager cannot be resolved表示编译器不知道该类/字段/。。。因此,它可能缺少相应的导入:

    import java.sql.DriverManager;
    

    错误The method prepareStatement(String) is undefined for the type Connection意味着找不到该方法,因为您正在导入并使用错误的Connection类。我不记得曾经使用过驱动程序JAR中的类,尽管驱动程序本身需要加载(不久前…)。基于给定给DriverManager的URL,Java使用了正确的类。您只需要使用java.sql包中的类

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    ...
    

    这里有一个非常简单的例子:

    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    public class Neo4j {
    
        public static void main(String[] args) throws Exception {
            try (Connection conn = DriverManager.getConnection("jdbc:neo4j:bolt://localhost", "neo4j", "test123")) {
                PreparedStatement stmt = conn.prepareStatement("MATCH (a:Aplz) RETURN *");
                ResultSet rset = stmt.executeQuery();
                while (rset.next()) {
                    System.out.println(rset.getObject(1));
                }
            }
        }
    }
    

    实际上,使用never Java,您只需要DriverManager,编译器在这方面做得很好:

    import java.sql.DriverManager;
    
    public class Neo4j {
    
        public static void main(String[] args) throws Exception {
            try (var conn = DriverManager.getConnection("jdbc:neo4j:bolt://localhost", "neo4j", "test123")) {
                var stmt = conn.prepareStatement("MATCH (a:Aplz) RETURN *");
                var rset = stmt.executeQuery();
                while (rset.next()) {
                    System.out.println(rset.getObject(1));
                }
            }
        }
    
    }