

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Java 连接到 Neptune 数据库实例
<a name="access-graph-sparql-java"></a>

此部分将指导您完成运行完整的 Java 示例，该示例连接到 Amazon Neptune 数据库实例并执行 SPARQL 查询。

从与您的 Neptune 数据库实例位于同一虚拟私有云 (VPC) 中的 Amazon EC2 实例中按照这些说明操作。

**使用 Java 连接到 Neptune**

1. 在您的 EC2 实例上安装 Apache Maven。如果使用的是 Amazon Linux 2023（首选），请使用：

   ```
   sudo dnf update -y
   sudo dnf install maven -y
   ```

   如果使用的是 Amazon Linux 2，请从 [https://maven.apache.org/download.cgi:](https://maven.apache.org/download.cgi:) 下载最新的二进制文件

   ```
   sudo yum remove maven -y
   wget https://dlcdn.apache.org/maven/maven-3/ <version>/binaries/apache-maven-<version>-bin.tar.gz
   sudo tar -xzf apache-maven-<version>-bin.tar.gz -C /opt/
   sudo ln -sf /opt/apache-maven-<version> /opt/maven
   echo 'export MAVEN_HOME=/opt/maven' >> ~/.bashrc
   echo 'export PATH=$MAVEN_HOME/bin:$PATH' >> ~/.bashrc
   source ~/.bashrc
   ```

1. 此示例仅使用 Java 8 进行测试。输入以下命令以在 EC2 实例上安装 Java 8：

   ```
   sudo yum install java-1.8.0-devel
   ```

1. 输入以下命令以在 EC2 实例上将 Java 8 设置为默认运行时系统：

   ```
   sudo /usr/sbin/alternatives --config java
   ```

   在系统提示时，输入 Java 8 的版本号。

1. 输入以下命令以在 EC2 实例上将 Java 8 设置为默认编译器：

   ```
   sudo /usr/sbin/alternatives --config javac
   ```

   在系统提示时，输入 Java 8 的版本号。

1. 在新目录中，创建 `pom.xml` 文件，然后在文本编辑器中打开它。

1. 将以下内容复制到 `pom.xml` 文件中并保存它（您通常可以将版本号调整为最新的稳定版本）：

   ```
   <project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.amazonaws</groupId>
     <artifactId>RDFExample</artifactId>
     <packaging>jar</packaging>
     <version>1.0-SNAPSHOT</version>
     <name>RDFExample</name>
     <url>https://maven.apache.org</url>
     <dependencies>
       <dependency>
         <groupId>org.eclipse.rdf4j</groupId>
         <artifactId>rdf4j-runtime</artifactId>
         <version>3.6</version>
       </dependency>
     </dependencies>
     <build>
       <plugins>
         <plugin>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>exec-maven-plugin</artifactId>
             <version>1.2.1</version>
             <configuration>
               <mainClass>com.amazonaws.App</mainClass>
             </configuration>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <configuration>
             <source>1.8</source>
             <target>1.8</target>
           </configuration>
         </plugin>
       </plugins>
     </build>
   </project>
   ```
**注意**  
如果您要修改现有的 Maven 项目，则所需依赖项将在上述代码中突出显示。

1. 要为示例源代码创建子目录 (`src/main/java/com/amazonaws/`)，请在命令行处输入以下命令：

   ```
   mkdir -p src/main/java/com/amazonaws/
   ```

1. 在 `src/main/java/com/amazonaws/` 目录中，创建名为 `App.java` 的文件，然后在文本编辑器中打开它。

1. 将以下内容复制到 `App.java` 文件中。*your-neptune-endpoint*替换为您的 Neptune 数据库实例的地址。
**注意**  
有关查找 Neptune 数据库实例的主机名的信息，请参阅[连接到 Amazon Neptune 端点](feature-overview-endpoints.md)部分。

   ```
   package com.amazonaws;
   
   import org.eclipse.rdf4j.repository.Repository;
   import org.eclipse.rdf4j.repository.http.HTTPRepository;
   import org.eclipse.rdf4j.repository.sparql.SPARQLRepository;
   
   import java.util.List;
   import org.eclipse.rdf4j.RDF4JException;
   import org.eclipse.rdf4j.repository.RepositoryConnection;
   import org.eclipse.rdf4j.query.TupleQuery;
   import org.eclipse.rdf4j.query.TupleQueryResult;
   import org.eclipse.rdf4j.query.BindingSet;
   import org.eclipse.rdf4j.query.QueryLanguage;
   import org.eclipse.rdf4j.model.Value;
   
   public class App
   {
       public static void main( String[] args )
       {
           String sparqlEndpoint = "https://your-neptune-endpoint:port/sparql";
           Repository repo = new SPARQLRepository(sparqlEndpoint);
           repo.initialize();
   
           try (RepositoryConnection conn = repo.getConnection()) {
              String queryString = "SELECT ?s ?p ?o WHERE { ?s ?p ?o } limit 10";
   
              TupleQuery tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
   
              try (TupleQueryResult result = tupleQuery.evaluate()) {
                 while (result.hasNext()) {  // iterate over the result
                      BindingSet bindingSet = result.next();
   
                      Value s = bindingSet.getValue("s");
                      Value p = bindingSet.getValue("p");
                      Value o = bindingSet.getValue("o");
   
                      System.out.print(s);
                      System.out.print("\t");
                      System.out.print(p);
                      System.out.print("\t");
                      System.out.println(o);
                 }
              }
           }
       }
   }
   ```

1. 使用以下 Maven 命令编译并运行示例：

   ```
   mvn compile exec:java
   ```

前面的示例使用限制为 10 的`?s ?p ?o`查询，返回图中最多 10 个三元组 (subject-predicate-object)。要查询其他内容，请将此查询替换为其他 SPARQL 查询。

示例中结果的迭代输出返回的每个变量的值。`Value` 对象将转换为 `String`，然后进行输出。如果更改查询的 `SELECT` 部分，您必须修改代码。