

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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 的測試。輸入以下內容將 Java 8 安裝在 EC2 執行個體上：

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

1. 輸入以下內容將 Java 8 設定為 EC2 執行個體上預設的執行時間：

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

   出現提示時，輸入 Java 8 的數字。

1. 輸入以下內容將 Java 8 設定為 EC2 執行個體上預設的編譯器：

   ```
   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
   ```

先前範例使用 `?s ?p ?o` 查詢和限制 10，以傳回圖形中的最多 10 個三元組 (subject-predicate-object)。若要查詢其他項目，請將查詢換成其他 SPARQL 查詢。

範例中重複出現的結果將印出所傳回之各變數的值。`Value` 物件會轉換成 `String`，然後列印。如果您變更查詢的 `SELECT` 部分，您必須修改程式碼。