08 April 2012
SimpleDB 是Amazon提供的一種NoSQL DATABASE!
詳細說明去官網看吧!


這篇主要會教大家如何
建立一張table,
新增資料
刪除資料
查詢資料


首先要先宣告一些必備的參數,
// 你的table name(在Relational Database叫做table,這裡叫做domain)
final String DOMAIN_NAME = "member";

// 取得憑證,這檔案預設在/src底下
AWSCredentials credentials = new PropertiesCredentials(getClass().getClassLoader().getResourceAsStream("AwsCredentials.properties"));

// 宣告一個SimpleDB
AmazonSimpleDB sdb = new AmazonSimpleDBClient(credentials);


接著就建立一個table,
// 建立一個table(在Relational Database叫做table,這裡叫做domain)
sdb.createDomain(new CreateDomainRequest(DOMAIN_NAME));


在SimpleDB的新增分成兩種方式!
一種是一筆一筆的新增,
另一種是批次的新增!(一次新增多筆)
有玩過GAE的大概知道,其實GAE也是這樣!
多筆的話就是用一個list存放資料!

在這邊先介紹一次新增多筆的!
// 先宣告一個List,List擺放的型態為ReplaceableItem,這型態意思是如果table裡面已經有一筆Ken的資料,那麼就取代掉那筆,不會多一筆
List<ReplaceableItem> listAddData = new ArrayList<ReplaceableItem>();


// 第一筆資料
// 先new一個Item,Item Name是Ken,然後這個item有四個attribute!分別是Sex, Tel, Mail, Nickname
listAddData.add(new ReplaceableItem("Ken").withAttributes(
new ReplaceableAttribute("Sex", "boy", true),
new ReplaceableAttribute("Tel", "09123456", true),
new ReplaceableAttribute("Mail", "xxx@kenyang.net", true),
new ReplaceableAttribute("Nickname", "KenYang", true)));

// 第二筆
listAddData.add(new ReplaceableItem("Sam").withAttributes(
new ReplaceableAttribute("Sex", "boy", true),
new ReplaceableAttribute("Tel", "09123456", true),
new ReplaceableAttribute("Mail", "xxx@kenyang.net", true),
new ReplaceableAttribute("Nickname", "SamYang", true)));


// 接著就新增吧!記得要指定Domain name!
sdb.batchPutAttributes(new BatchPutAttributesRequest(DOMAIN_NAME, listAddData));




接著要介紹新增一筆的! 其實大同小異,只是要宣告一個PutAttributesRequest來擺放資料!
一個PutAttributeRequest就代表一筆資料!
PutAttributesRequest dataAttribute = new PutAttributesRequest().withDomainName(DOMAIN_NAME).withItemName("John"); 

dataAttribute.getAttributes().add(
new ReplaceableAttribute()
.withName("Sex")
.withValue("girl")
.withReplace(true));

dataAttribute.getAttributes().add(
new ReplaceableAttribute()
.withName("Tel")
.withValue("0987123")
.withReplace(true));

dataAttribute.getAttributes().add(
new ReplaceableAttribute()
.withName("Mail")
.withValue("xxx@gmail.com")
.withReplace(true));

dataAttribute.getAttributes().add(
new ReplaceableAttribute()
.withName("Nickname")
.withValue("JohnYang")
.withReplace(true));

sdb.putAttributes(dataAttribute);




接下來要介紹刪除! 這邊是介紹一次刪除多筆的!
一樣是用一個List去存放要刪除的Item Name!
至於刪除單筆,也跟上述方法一樣! 這裡就不多作介紹!
List<DeletableItem> listDeleteData = new ArrayList<DeletableItem>();
listDeleteData.add(new DeletableItem().withName("Ken"));
listDeleteData.add(new DeletableItem().withName("Sam"));
// 所以Ken和Sam這兩筆資料會被刪除
sdb.batchDeleteAttributes(new BatchDeleteAttributesRequest(DOMAIN_NAME,listDeleteData));



最後要介紹查詢了!
// 注意,傳統的SQL指令,都是用單引號('),但是這裡要用(`)
String selectExpression = "select * from `" + DOMAIN_NAME + "` ";
SelectRequest selectRequest = new SelectRequest(selectExpression);
SelectResult sr = sdb.select(selectRequest);

for (Item item : sr.getItems()) {
response.getWriter().println(item.getName());
response.getWriter().println(item.getAttributes().get(0).getValue());
}








blog comments powered by Disqus