在 Android 中使用 Amazon SimpleDB






4.58/5 (11投票s)
本文包含 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/,这是免费的。
- 访问链接 http://aws.amazon.com/simpledb/ 创建 AWS 账户。
- 有关创建 AWS 账户的更多详细信息,请访问此链接:http://docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/AboutAWSAccounts.html
2. 为 SimpleDB 创建访问密钥 ID 和秘密访问密钥
- 使用步骤 1 中提到的步骤创建 AWS 账户后,您需要为
SimpleDB
创建访问密钥 ID 和秘密访问密钥对。访问密钥 ID 和秘密访问密钥将用于我们的应用程序中,以验证 SimpleDB 数据库的 Web 服务请求。 - 登录 AWS 账户,点击左上角的用户名,然后从列表中选择“安全凭证”选项。
- 在下一页,从页面左侧选择“用户”选项。
- 点击“创建新用户”按钮,在弹出的窗口中输入用户名。
- 创建用户名后,下载并保存用户的安全凭证。
- 下载的 `credentials.csv` 文件包含用户名、访问密钥 ID 和秘密访问密钥。将 `credentials.csv` 文件保存在安全的位置。
- 为了对
SimpleDB
执行读写操作,我们需要为用户分配管理权限。要为最终用户分配管理权限,请选择用户的权限标签,然后点击“附加用户策略”按钮。 - 从“管理用户权限策略”中,选择“管理访问”选项。
- 点击“应用策略”以更改用户权限。
3. 下载 SDK
要访问 AWS 服务,请使用以下链接下载 AWS SDK:http://aws.amazon.com/sdkforandroid/。这是一个 zip 文件,包含用于访问 AWS SimpleDB 数据库的 API 库。我们将在接下来的步骤中将此库导入到 Android 项目中。
4. 创建新项目
完成必要的配置后,是时候开始我们的项目了。
在这个项目中,我们将为 电影
数据库创建一个应用程序。此应用程序将允许用户将电影信息存储在 SimpleDB
中,并允许用户从 SimpleDB
中检索电影信息。
首先,我们将完成 SimpleDB
访问的项目配置,然后我们将了解如何从 Android 项目中调用各种 SimpleDB
API。
项目配置
- 在 Eclipse 中,通过“文件 -> 新建 -> Android 应用程序项目”创建一个新项目,并填写所需详细信息。我将项目名称命名为
SimpleDBTest
,包名命名为com.simpledb.info
。 - 现在我们需要将 AWS Android SDK 添加到我们的 Android 项目中。
- 右键单击项目的 `libs` 文件夹,然后选择导入选项。
- 从导入表单中,选择“常规”->“文件系统”选项。
- 在文件系统表单中,单击浏览按钮并提供在步骤 3 中下载的 SDK 的路径。例如,“C:\...\aws-android-sdk-1.7.1.1\aws-android-sdk-1.7.1.1\lib”。
- 现在,从导入表单的左侧列表中,选择 `aws-android-sdk-1.7.1.1-debug.jar` 选项。
- 点击导入表单上的“完成”按钮,将选定的 jar 文件添加到 Android 项目中。
- AWS
SimpleDB
需要 Internet 权限,因此请在 `AndroidManifest.xml` 文件中添加 Internet 权限代码。 - 现在我们需要在 Android 项目中存储访问密钥 ID 和秘密访问密钥。为此,请按如下方式创建新的属性文件并存储访问密钥 ID 和秘密访问密钥。
- 选择 src->com.simpledb.info (包名) -> (右键单击) 新建 -> 文件,将文件名命名为 credential.properties。
- 访问密钥 ID 和秘密访问密钥是我们从步骤 2 下载的密钥。打开从步骤 2 获得的 `credentials.csv` 文件,并复制访问密钥 ID 和秘密密钥 ID。
- 在 `credential.properties` 文件中,按如下方式添加访问密钥 ID 和秘密访问密钥:
accessKey=xxxxxxxxxxxxxxxxx secreteKey=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
- 在这个项目中,我们将创建三个活动:
- 主活动:这是主活动,显示存储和读取电影信息的选项。
- 存储活动:此活动从用户处收集电影信息并将其存储到 SimpleDB 中。
- 读取活动: 此活动检索存储在域中的所有电影信息并将其显示给用户。
上述活动的代码可在随附的项目 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,您可以专注于应用程序开发,而无需担心基础设施。