65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Android 中使用 Amazon SimpleDB

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.58/5 (11投票s)

2014 年 6 月 25 日

CPOL

6分钟阅读

viewsIcon

25873

downloadIcon

33

本文包含 SimpleDB 的 Web 服务 API 项目和代码。

引言

Amazon Web Services (AWS) 提供构建互联移动应用的服务。SimpleDB 是 AWS 提供的用于云数据存储的 Web 服务。在本博客中,我们将探讨 Android 应用与 AWS SimpleDB 的连接。有关 SimpleDB 的更多详细信息,您可以访问以下链接:http://aws.amazon.com/simpledb/

背景

SimpleDB 概念

SimpleDB 是一个高可用数据存储。SimpleDB 是一个非关系型数据存储,具有简单的 Web 服务 API,这使得开发过程变得容易。SimpleDB 提供了简单的 Web 服务调用来存储和检索存储在 Amazon SimpleDB 中的数据。

欲了解更多详情,请访问此链接:此处

作为非关系型数据库系统,SimpleDB 使用的术语与普通数据库系统不同。下表显示了普通数据库系统和 Amazon SimpleDB 中使用的术语。

普通数据库系统 Amazon Simple DB
表格 定义域

Column

Attribute
项目

Using the Code

现在我们一步步看看如何从头到尾使用 SimpleDB 数据库。我们将尝试创建一个简单的项目,将电影信息存储在 SimpleDB 中并从中检索信息。

在这个项目中,我们将为 电影 数据库创建一个应用程序。此应用程序将允许用户将电影信息存储在 SimpleDB 中,并允许用户从 SimpleDB 中检索电影信息。

对于上述项目需求,我们将设计 SimpleDB 域“movie_info”如下:

名称 评分 描述
电影名称 1 3.5 电影 1 描述
电影名称 2 5.0 电影 2 描述

步骤

要使用 SimpleDB 创建 Android 应用程序,您需要执行以下步骤:

1. 创建 AWS 账户

要使用 SimpleDB,您需要首先创建 AWS 账户。使用以下链接登录 http://aws.amazon.com/,这是免费的。

  1. 访问链接 http://aws.amazon.com/simpledb/ 创建 AWS 账户。
  2. 有关创建 AWS 账户的更多详细信息,请访问此链接:http://docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/AboutAWSAccounts.html
2. 为 SimpleDB 创建访问密钥 ID 和秘密访问密钥
  1. 使用步骤 1 中提到的步骤创建 AWS 账户后,您需要为 SimpleDB 创建访问密钥 ID 和秘密访问密钥对。访问密钥 ID 和秘密访问密钥将用于我们的应用程序中,以验证 SimpleDB 数据库的 Web 服务请求。
  2. 登录 AWS 账户,点击左上角的用户名,然后从列表中选择“安全凭证”选项。
  3. 在下一页,从页面左侧选择“用户”选项。
  4. 点击“创建新用户”按钮,在弹出的窗口中输入用户名。
  5. 创建用户名后,下载并保存用户的安全凭证。
  6. 下载的 `credentials.csv` 文件包含用户名、访问密钥 ID 和秘密访问密钥。将 `credentials.csv` 文件保存在安全的位置。
  7. 为了对 SimpleDB 执行读写操作,我们需要为用户分配管理权限。要为最终用户分配管理权限,请选择用户的权限标签,然后点击“附加用户策略”按钮。
  8. 从“管理用户权限策略”中,选择“管理访问”选项。
  9. 点击“应用策略”以更改用户权限。
3. 下载 SDK

要访问 AWS 服务,请使用以下链接下载 AWS SDK:http://aws.amazon.com/sdkforandroid/。这是一个 zip 文件,包含用于访问 AWS SimpleDB 数据库的 API 库。我们将在接下来的步骤中将此库导入到 Android 项目中。

4. 创建新项目

完成必要的配置后,是时候开始我们的项目了。

在这个项目中,我们将为 电影 数据库创建一个应用程序。此应用程序将允许用户将电影信息存储在 SimpleDB 中,并允许用户从 SimpleDB 中检索电影信息。

首先,我们将完成 SimpleDB 访问的项目配置,然后我们将了解如何从 Android 项目中调用各种 SimpleDB API。

项目配置

  1. 在 Eclipse 中,通过“文件 -> 新建 -> Android 应用程序项目”创建一个新项目,并填写所需详细信息。我将项目名称命名为 SimpleDBTest,包名命名为 com.simpledb.info
  2. 现在我们需要将 AWS Android SDK 添加到我们的 Android 项目中。
    1. 右键单击项目的 `libs` 文件夹,然后选择导入选项。
    2. 从导入表单中,选择“常规”->“文件系统”选项。
    3. 在文件系统表单中,单击浏览按钮并提供在步骤 3 中下载的 SDK 的路径。例如,“C:\...\aws-android-sdk-1.7.1.1\aws-android-sdk-1.7.1.1\lib”。
    4. 现在,从导入表单的左侧列表中,选择 `aws-android-sdk-1.7.1.1-debug.jar` 选项。
    5. 点击导入表单上的“完成”按钮,将选定的 jar 文件添加到 Android 项目中。
  3. AWS SimpleDB 需要 Internet 权限,因此请在 `AndroidManifest.xml` 文件中添加 Internet 权限代码。
  4. 现在我们需要在 Android 项目中存储访问密钥 ID 和秘密访问密钥。为此,请按如下方式创建新的属性文件并存储访问密钥 ID 和秘密访问密钥。
    1. 选择 src->com.simpledb.info (包名) -> (右键单击) 新建 -> 文件,将文件名命名为 credential.properties
    2. 访问密钥 ID 和秘密访问密钥是我们从步骤 2 下载的密钥。打开从步骤 2 获得的 `credentials.csv` 文件,并复制访问密钥 ID 和秘密密钥 ID。
    3. 在 `credential.properties` 文件中,按如下方式添加访问密钥 ID 和秘密访问密钥:
    accessKey=xxxxxxxxxxxxxxxxx
    secreteKey=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
  5. 在这个项目中,我们将创建三个活动:
    1. 主活动:这是主活动,显示存储和读取电影信息的选项。
    2. 存储活动:此活动从用户处收集电影信息并将其存储到 SimpleDB 中。
    3. 读取活动: 此活动检索存储在域中的所有电影信息并将其显示给用户。

上述活动的代码可在随附的项目 zip 文件中找到。

SimpleDB API 调用

A. 创建 Amazon SimpleDB 连接

要创建 SimpleDB 连接,请创建一个单独的 `connection.java` 类文件。在此代码中,`getProperties` 函数用于检索存储在 `credentials.properties` 文件中的访问密钥和秘密密钥。`getAwsSimpleDB` 函数向 AWS Web 服务提供凭据并返回创建的 `SimpleDB` 对象。

package com.simpledb.info;

import java.util.Properties;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.simpledb.AmazonSimpleDB;
import com.amazonaws.services.simpledb.AmazonSimpleDBClient;

public class Connection {
    public static AmazonSimpleDB awsSimpleDB;
    public static Properties properties;

    // 1. Get Simple DB connection.
    public static AmazonSimpleDB getAwsSimpleDB()
    {
        if(awsSimpleDB==null)
        {
            BasicAWSCredentials credentials= new BasicAWSCredentials(getProperties().getProperty("accessKey"), Connection.getProperties().getProperty("secreteKey"));
            awsSimpleDB= new AmazonSimpleDBClient(credentials);
        }
        return awsSimpleDB;
    }
    
    public static Properties getProperties()
    {
        if(properties==null)
        {
            properties=new Properties();
            try {
                properties.load(StoreToDB.class.getResourceAsStream("credentials.properties"));
                
            } catch (Exception e) {
                // TODO: handle exception
            }        }
        return properties;    
    }
}

B. 创建域并向域存储数据

SimpleDB 中的域与表相同。在项目中,我们创建了 `StoreToDB` 类来在域中存储行。

public static void saveMovie(String name, float rating, String description)
    {
        try {

             Connection.getAwsSimpleDB().createDomain(new CreateDomainRequest( "movie_info"));
             List<ReplaceableAttribute> attribute= new ArrayList<ReplaceableAttribute>(1);
             attribute.add(new ReplaceableAttribute().withName("movieName").withValue(name));
             attribute.add(new ReplaceableAttribute().withName("movieRating").withValue(Float.toString(rating)));
             attribute.add(new ReplaceableAttribute().withName("movieDescription").withValue(description));
             Connection.awsSimpleDB.putAttributes(new PutAttributesRequest("movie_info",name, attribute));
            
        } catch (Exception e) {
                System.out.println(e.getMessage());
        }
    }    

C. 从域中检索存储的数据

为了从域中检索存储的数据,我们创建了 `ReadFromDB.java` 类。为了检索数据,我们需要创建 `SelectRequest`,它以项目列表格式返回行列表。

在这个项目中,我们正在检索表中的所有行,我们可以通过对特定属性使用 `where` 条件来从域中检索特定行。

为了分离特定的字段,我们使用属性名作为过滤器,如下所示:

public static Movie [] getAllMovies() throws Exception
    {
        SelectRequest selectRequest=  new SelectRequest("select * from movie_info").withConsistentRead(true);
        
        List<com.amazonaws.services.simpledb.model.Item> items  = Connection.getAwsSimpleDB().select(selectRequest).getItems();
        
        try
        {
        com.amazonaws.services.simpledb.model.Item temp1;
        int size= items.size();
        Movie [] movieList= new  Movie[size];
        
        for(int i=0; i<size;i++)
        {
            temp1= ((com.amazonaws.services.simpledb.model.Item)items.get( i ));
            
            List<com.amazonaws.services.simpledb.model.Attribute> tempAttribute= temp1.getAttributes();
            movieList[i]= new Movie();
            for(int j=0; j< tempAttribute.size();j++)
            {
                if(tempAttribute.get(j).getName().equals("movieName"))
                {
                    movieList[i].movieName=tempAttribute.get(j).getValue();
                }
                else if(tempAttribute.get(j).getName().equals("movieDescription"))
                {
                    movieList[i].movieDesctiption =tempAttribute.get(j).getValue();
                }
                else if(tempAttribute.get(j).getName().equals("movieRating"))
                {
                    movieList[i].movieRating =Float.valueOf(tempAttribute.get(j).getValue());                    
                }
            }
        }
        return movieList;
        }
        catch( Exception eex)
        {
            throw new Exception("FIRST EXCEPTION", eex);
        }
    }

结论

Amazon SimpleDB 服务是一个低接触、高可用、灵活且易于使用的小型数据库应用程序服务。SimpleDB 应用程序可以集成到许多其他应用程序中,例如日志记录、审计、跟踪应用程序等。使用 Amazon SimpleDB,您可以专注于应用程序开发,而无需担心基础设施。

© . All rights reserved.