Java Neo4j型失配

Java Neo4j型失配,java,eclipse,jdbc,neo4j,Java,Eclipse,Jdbc,Neo4j,我试图在eclipse中编写一个连接到neo4j的JDBC代码。我可以让它连接到数据库,但在运行查询时遇到了问题。我已经导入了Neo4J驱动程序jar以及所需的大多数驱动程序导入。尽管如此,我仍然在两个地方遇到了错误: PreparedStatement statement = conn.prepareStatement(cypher); 给我一个错误: 这条线上有多个标记 - The method prepareStatement(String) is undefined for the t

我试图在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,因为我没有将它导入到这个类中

我的另一个错误在第行:

Connection conn=DriverManager.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
    }
}

无法解析错误消息
DriverManager
意味着编译器不知道该类/字段/。。。因此,它可能缺少相应的导入:

import java.sql.DriverManager;
类型连接的方法prepareStatement(String)未定义错误
,这意味着找不到此方法,因为您正在导入并因此使用错误的
连接
类。我不记得曾经使用过驱动程序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));
            }
        }
    }

}

我相信你的问题与进口有关。。。发布相关问题(DriverManager、连接等)-请编辑要添加的问题them@CarlosHeuberger我已经编辑了
java.sql.DriverManager
缺失的问题;尝试使用
java.sql
类而不是
neo4j
类,例如,
import java.sql.Connection
import java.sqlPreparedStatement
,…@CarlosHeuberger我必须连接到一个neo4j数据库,尽管通常您不必使用驱动程序类,但这些都是在后台自动使用的。试试看我不明白为什么我在访问Neo4j时会使用java.sql这是驱动程序的工作方式。Neo4J驱动程序注册到DriverManager。当DriverManager获得url
“jdbc:neo4j…”
时,它将发挥其魔力,找到一个实现
java.sql.Connection
(实际上是一个返回此类实例的实例)的类。您只需使用接口(与List和ArrayList相同)-这就是它的用途,因此您可以轻松更改数据库(理论上)另一个优点是,您不需要驱动程序来编译应用程序-应用程序不依赖于驱动程序本身(不考虑查询可能是特定于数据库的-特别是Neo4J)
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));
            }
        }
    }

}