我遇到了为Neo4J-jdbc驱动程序工作获取最小可行代码段的问题。我正在使用带有gradle的intelliJ想法。当我import org.neo4j.jdbc.*;
时,DriverManager
无法解析且Unhandled Exception: java.sql.SQLException
出现多次。当我import java.sql.*
时,会出现更多java.sql.SQLException
个错误。当我同时导入两个时,会有多个错误,因为两个库之间的引用是不明确的。
官方文档中的最小可行摘录如下:
// Connecting
try (Connection con = DriverManager.getConnection("jdbc:neo4j:bolt://localhost", 'neo4j', password)) {
// Querying
String query = "MATCH (u:User)-[:FRIEND]-(f:User) WHERE u.name = {1} RETURN f.name, f.age";
try (PreparedStatement stmt = con.prepareStatement(query)) {
stmt.setString(1,"John");
try (ResultSet rs = stmt.execute()) {
while (rs.next()) {
System.out.println("Friend: "+rs.getString("f.name")+" is "+rs.getInt("f.age"));
}
}
}
}
Gradle依赖项:
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.neo4j', name: 'neo4j-jdbc-bolt', version: '3.1.0'
compile 'com.sparkjava:spark-core:2.3'
}
我真的在寻找一个最小的实现,我只是好奇我错过了什么来让最小的代码段工作。
答案 0 :(得分:2)
您需要导入java.sql.*
,这就是全部。您将拥有一些SQLException
,但您只需要在catch
中处理它们,或者在方法签名中添加例外(如下所示)。
代码段中有一个错误,stmt.execute()
返回boolean
而不是ResultSet
,因此您需要将其替换为stmt.executeQuery()
。
这是一个完整/有效的例子:
import java.sql.*;
public class JDBCTest {
public static void main() throws SQLException {
// Connecting
try (Connection con = DriverManager.getConnection("jdbc:neo4j:bolt://localhost", "neo4j", "admin")) {
// Querying
String query = "MATCH (u:User)-[:FRIEND]-(f:User) WHERE u.name = {1} RETURN f.name, f.age";
try (PreparedStatement stmt = con.prepareStatement(query)) {
stmt.setString(1,"John");
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
System.out.println("Friend: "+rs.getString("f.name")+" is "+rs.getInt("f.age"));
}
}
}
}
}
}