IBM Bluemix上のSQLDB（DB2）に画像を格納するJavaアプリ（第一回）

#経緯
JavaアプリでDB2に画像を保存するアプリをつくってみました。その備忘録をここに載せておきます。これからBluemixでJavaアプリを作ってみるという方がいらっしゃいましたらご参考頂ければと思います。複数回に分けて奮闘している様子をお届けしていこうと思います。


#レシピ

- IBM Bluemixアカウント
- Ecilpse
- 保存したい画像



#下ごしらえ
1. IBM Bluemixのアカウントを取得
   [こちらのサイト](http://ibm.biz/bluemixfree)を参考にBluemixのアカウントを取得してください。30日間のフリーアカウントが利用可能です。30日を越えてもクレジット登録さえ行えば、無料枠の範囲でも個人利用であれば十分遊べるものシロモノです。


2. Eclipse Bluemix Plugin Toolのインストール
   Eclipseを起動後、Help > Eclipse Marketplace からEclipse Marketplaceにアクセスし、検索バーから"IBM Eclipse Tools for Bluemix"を見つけたら、インストールをクリックしインストールをしてください。
![Eclipse_Marketplace.png](https://qiita-image-store.s3.amazonaws.com/0/87213/7016759a-abab-c730-1ad0-6923d2cc320b.png)
（私のはすでにインストール済みなので表記がInstalledになってます。）

3. サンプル画像を用意
   画像の大きさの制限もあるので、ここでは画像処理の研究ではおなじみのLennaとBaboonです。
![Lenna.jpg](https://qiita-image-store.s3.amazonaws.com/0/87213/153835e1-4eb8-5c1b-b853-1d02209ea90f.jpeg)　　　　![baboon.jpeg](https://qiita-image-store.s3.amazonaws.com/0/87213/3de7b1ef-1787-04d8-1b3a-31ea79fe726b.jpeg)

#手順
それではさっそく作っていきます。手順の概要をザックリと。

　1. Bluemix上にWebサーバーとDBサーバーを用意（第一回）←いまここ
　2. Javaアプリを用意（第二回）
　3. BluemixのDBサーバーに画像をアップロード（第三回）
　4. libertyサーバーをBluemixにプッシュ（第四回）
 
## 1.WebサーバーとDBサーバーの作成
Bluemixにログイン後、カタログからログイン。ボイラーテンプレートから、Java DB Web Starterをクリックをクリック。これで、IBM WebSphere Liberty Profile、つまりWebSphere Application Serverのクラウド版がささっと立ち上げます。
![Java_DB_Web_Starter_-_IBM_Bluemix.png](https://qiita-image-store.s3.amazonaws.com/0/87213/3ed26141-97e0-76a7-83f7-39c738e18302.png)←こちらのアイコン（2015年9月時点）
さらにSQL Database（DB2）もバインドされた状態で立ち上がるため、WASとDB2のミドルウェアを史上最速のスピードで利用に可能になる環境です。しかも無料で。（こちらも無料枠内で十分遊べます。）

アプリが稼働するので公開されたURLをクリックし、Welcom画面が正常に表示されることを確認してください。正しく稼働すると以下のような画面になります。
![Java_DB_Sample_Application.png](https://qiita-image-store.s3.amazonaws.com/0/87213/9e51c478-292c-ea02-bd74-e578f9513e04.png)

## 2. SQL Databseのテーブル作成

SQL Databaseにテーブルを作成してみましょう。
アプリケーションの概要からSQL Databaseをクリック。
![ダッシュボード_-_IBM_Bluemix.png](https://qiita-image-store.s3.amazonaws.com/0/87213/ff03a716-9790-708b-1288-0682959e344d.png)

SQL Databaseの管理コンソールを立ち上げますので画面右側になるLAUNCHをクリック。
![ダッシュボード_-_IBM_Bluemix.png](https://qiita-image-store.s3.amazonaws.com/0/87213/47778c57-a853-f9de-cc5c-44b7833be7ff.png)

スタート画面から、Manage > Work with Tables をクリック。
![IBM_SQL_Database__Getting_Started.png](https://qiita-image-store.s3.amazonaws.com/0/87213/ff7fd1cf-07d0-4362-8116-b1dcf892b08e.png)


以下のようなテーブル定義で作成していこうと思います。

| Column Name | Data Type   | Length     | Scale   | Alow Nulls |
|:------------|:------------|:----------:|:-------:|:-----------|
|CONTACT_ID   |INTEGER      |4           | 0       | NO_TEXT    |
|FIRST_NAME   |VARCHAR      |45          | 0       | YES_TEXT   |    
|LAST_NAME    |VARCHAR      |45          | 0       | YES_TEXT   |    
|PHOTO        |BLOB         |1048576     | 0       | YES_TEXT   |    

CONTACT_IDはアップロードするたびにシーケンスに追加されるように定義します。

デフォルトでは、ユーザー名がSchemaに割り当てられるので、こちらにテーブルを作成してみます。
![IBM_SQL_Database__Work_with_Tables.png](https://qiita-image-store.s3.amazonaws.com/0/87213/0a1121b5-c479-d9e3-f642-ddf23ca7b2d2.png)

左側のプラスをクリックしてTABLE作成のQueryを発行します。便宜上カラム名は小文字にしております。小文字でこのまま発行しても問題ありません。


```sql

CREATE TABLE CONTACTS (
  contact_id INT NOT NULL
    GENERATED ALWAYS
      AS IDENTITY
      (START WITH 1
       INCREMENT BY 1
       MINVALUE 1
       NO MAXVALUE
       NO CYCLE
       NO CACHE
       ORDER),
  first_name VARCHAR(45) DEFAULT NULL,
  last_name VARCHAR(45) DEFAULT NULL,
  photo BLOB,
  PRIMARY KEY (contact_id)
)
```

![IBM_SQL_Database__Work_with_Tables.png](https://qiita-image-store.s3.amazonaws.com/0/87213/8bd4a3f2-71ff-811a-3ee0-26fdae23afc2.png)

このままRUN DDLをクリックして、RUN DDL IS SUCCESSFUL!とうポップアップメッセージがブラウザに表示されれば成功です。

スキーマにCONTACSテーブルが作成されており以下のようにテーブルの定義がされていることを確認。
![IBM_SQL_Database__Work_with_Tables.png](https://qiita-image-store.s3.amazonaws.com/0/87213/410e99cd-bee8-91dd-97cf-bc4e490ef3e4.png)

はい、問題なさそうです。

次回は、Javaアプリを作成していきます。

# 関連リンク
1. [IBM Bluemix上のSQLDB（DB2）に画像を格納するJavaアプリ（第二回）](http://qiita.com/mxm/items/e5741a0ebd3e0e8ba396)