连接
一旦您安装了驱动程序并拥有一个正在运行的 Neo4j 实例,您就可以将应用程序连接到数据库了。
连接到数据库
您可以通过创建 Driver 对象并提供 URL 和身份验证令牌来连接到数据库。
package demo;
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.GraphDatabase;
public class App {
public static void main(String... args) {
// URI examples: "neo4j://", "neo4j+s://xxx.databases.neo4j.io"
final String dbUri = "{neo4j-database-uri}";
final String dbUser = "{neo4j-username}";
final String dbPassword = "{neo4j-password}";
try (var driver = GraphDatabase.driver(dbUri, AuthTokens.basic(dbUser, dbPassword))) { (1)
driver.verifyConnectivity(); (2)
System.out.println("Connection established.");
}
}
}
1 | 创建 Driver 实例仅提供有关如何访问数据库的信息,但并不会实际建立连接。连接会在第一次查询执行时才建立。 |
2 | 要立即验证驱动程序是否可以连接到数据库(例如:凭据有效、版本兼容等),请在初始化驱动程序后使用 .verifyConnectivity() 方法。 |
创建 Driver
对象和连接验证都可能引发多种不同的异常。由于连接错误会阻塞任何后续任务,因此最常见的选择是:如果建立连接时发生异常,则让程序崩溃。
Driver
对象是不可变的、线程安全的且创建成本高昂,因此您的应用程序应该只创建一个实例并传递它(您可以在线程之间共享 Driver
实例)。如果您需要通过多个不同用户查询数据库,请使用模拟,而无需创建新的 Driver
实例。如果您想更改 Driver
配置,则需要创建一个新对象。
驱动程序还支持其他身份验证方法(kerberos、bearer、自定义)。 |
连接到 Aura 实例
当您创建 Aura 实例时,您可以下载一个文本文件(即所谓的 Dotenv 文件),其中包含以环境变量形式存在的数据库连接信息。该文件的名称形式为 Neo4j-a0a2fa1d-Created-2023-11-06.txt
。
您可以手动从该文件中提取 URI 和凭据,或者使用第三方模块加载它们。我们为此推荐使用模块 dotenv-java
。
dotenv-java
从 Dotenv 文件中提取凭据package demo;
import io.github.cdimascio.dotenv.Dotenv;
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.GraphDatabase;
public class App {
public static void main(String... args) {
var dotenv = Dotenv.configure()
//.directory("/path/to/env/file")
.filename("Neo4j-a0a2fa1d-Created-2023-11-06.txt")
.load();
final String dbUri = dotenv.get("NEO4J_URI");
final String dbUser = dotenv.get("NEO4J_USERNAME");
final String dbPassword = dotenv.get("NEO4J_PASSWORD");
try (var driver = GraphDatabase.driver(dbUri, AuthTokens.basic(dbUser, dbPassword))) {
driver.verifyConnectivity();
System.out.println("Connection established.");
}
}
}
Aura 实例与任何其他 Neo4j 实例在概念上没有区别,因为 Aura 只是 Neo4j 的一种部署模式。通过驱动程序与 Neo4j 数据库交互时,无论是 Aura 实例还是其他部署方式,都没有区别。 |
关闭连接
始终关闭 Driver
对象以释放所有已分配的资源,即使连接不成功或发生运行时错误也是如此。您可以使用 try-with-resources
语句创建 Driver
对象,或者显式调用 Driver.close()
方法。
更多连接参数
有关更多 Driver
配置参数和进一步的连接设置,请参阅高级连接信息。
词汇表
- LTS
-
长期支持(Long Term Support)版本是指保证在数年内获得支持的版本。Neo4j 4.4 是 LTS 版本,Neo4j 5 也将拥有一个 LTS 版本。
- Aura
-
Aura 是 Neo4j 的全托管云服务。它提供免费和付费计划。
- Cypher
-
Cypher 是 Neo4j 的图查询语言,它允许您从数据库中检索数据。它类似于 SQL,但专用于图。
- APOC
-
Awesome Procedures On Cypher (APOC) 是一个函数(有很多)库,这些函数本身无法轻易地用 Cypher 表达。
- Bolt
-
Bolt 是 Neo4j 实例和驱动程序之间交互所使用的协议。它默认监听端口 7687。
- ACID
-
原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)(ACID)是保证数据库事务可靠处理的特性。符合 ACID 的 DBMS 确保数据库中的数据即使在发生故障时也能保持准确和一致。
- 最终一致性
-
如果数据库能够保证所有集群成员在某个时间点将存储最新版本的数据,则该数据库是最终一致的。
- 因果一致性
-
如果数据库中的读写查询在集群的每个成员中都以相同的顺序可见,则该数据库是因果一致的。这比最终一致性更强。
- NULL
-
Null 标记不是一种类型,而是值缺失的占位符。有关更多信息,请参阅Cypher → 使用
null
。 - 事务
-
事务是一个工作单元,它要么被整体提交,要么在失败时回滚。一个例子是银行转账:它涉及多个步骤,但所有这些步骤都必须成功或被撤销,以避免资金从一个账户中扣除而没有添加到另一个账户。
- 背压
-
背压是一种与数据流相反的作用力。它确保客户端不会被超出其处理能力的数据量所淹没。
- 事务函数
-
事务函数是由
executeRead
或executeWrite
调用执行的回调。在服务器故障的情况下,驱动程序会自动重新执行该回调。 - Driver
-
一个
Driver
对象包含与 Neo4j 数据库建立连接所需的详细信息。