Transcript pptx

データベース
6/15
前回の内容

エラーがでた時の対処法

画像の読み込みと表示
画像の回転
 画像の拡大


図形の描画
本日の内容

データベースの利用

検索のオプション

ファイルの有無の確認

宿題について
データベースの利用

AndroidにはSQLiteというデータベー
スが搭載されています。
データベースとは?

データベースとは、相互に関連するデータを整
理・統合し、検索しやすくしたファイル。また、
このようなファイルの共用を可能にするシステム。
例:あるコンビニのデータベース
フィールド
テーブル
商品テーブル
顧客テーブル
商品名
価格
お茶
150
性別
年代
金額
パン
100
男性
20
420 13:00
女性
10
368 13:02
データ
来店時間
データベースを操作するには

SQL(Structured Query Language:構造
化問合せ言語)を使い、データの挿入
や取り出す条件などを指定する
SQL
データベース
処理の結果
実行結果

DBTestActivity.javaを実行してみましょ
う
ソースコード
String str = "data/data/" + getPackageName() + "/Sample2.db";
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(str, null);
①
db.execSQL("DROP TABLE IF EXISTS product");
db.execSQL("CREATE TABLE product"
②
+ "(id INTEGER PRIMARY KEY, name STRING, price INTEGER)");
String[] qry = { "INSERT INTO product(name, price) VALUES ('鉛筆', 80)",
"INSERT INTO product(name, price) VALUES ('消しゴム', 50)",
"INSERT INTO product(name, price) VALUES ('定規', 200)",
"INSERT INTO product(name, price) VALUES ('コンパス', 300)",
"INSERT INTO product(name, price) VALUES ('ボールペン', 100)" };
for (int i = 0; i < qry.length; i++) {
db.execSQL(qry[i]);
}
③
ソースコード
Cursor cr = db.rawQuery("SELECT * FROM product",null);
startManagingCursor(cr);
ArrayAdapter<String> ad = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1);
while (cr.moveToNext()) {
int i = cr.getColumnIndex("id");
int n = cr.getColumnIndex("name");
int p = cr.getColumnIndex("price");
int id = cr.getInt(i);
String name = cr.getString(n);
int price = cr.getInt(p);
String row = id + "------" + name + ":" + price + "円";
ad.add(row);
}
lv.setAdapter(ad);
ll.addView(lv);
db.close();
④
⑤
⑥
①

データベースの作成
データベースを作成・保存してある
データベースを開くには
openOrCreateDatabaseメソッドを使い
ます
データベースの場所と名前
SQLiteDatabase.openOrCreateDatabase(str, null);
Nullで固定
②


テーブルの作成
データベースを作成したらテーブルを作成しま
す
テーブルの作成はCREATE TABLE <テーブル名>
(フィールド名 型 オプション)で指定します
例
CREATE TABLE product (id INTEGER PRIMARY KEY,
name STRING, price INTEGER)
※
赤:フィールド1
青:フィールド2
緑:フィールド3
を表す
※
PRIMARY KEYは複数のデータにおいて絶対に重複しないフィールド
※
オプションは省略可
②

テーブルの作成
また、1つのデータベースに同じ名前
のテーブルが存在してはいけないので、
すでに同じ名前のテーブルが存在した
ら削除しています
// productというなまえのテーブルがあったら削除
DROP TABLE IF EXISTS product
③

データの挿入
データの挿入にはテーブルとフィール
ドを指定してINSERT INTOを使います
INSERT INTO product(name, price) VALUES ('鉛筆', 80)
指定したテーブルの フィールドに追加する値
フィールド
テーブル名
④

データの検索
データの検索にはSELECTを使い、
Cursorオブジェクトで実際に結果を取
得します
取ってくる結果
*は全部を意味する
検索するテーブル
Cursor cr = db.rawQuery("SELECT * FROM product",null);
startManagingCursor(cr);
⑤

検索結果の取得
SELECTを実行するとCursorオブジェクトに結果が
返ってくるのでgetColumnIndexメソッドでフィール
ドのインデックスを、getInt等でデータの型に合わ
せて取り出します
int i = cr.getColumnIndex("id");
int n = cr.getColumnIndex("name");
int p = cr.getColumnIndex("price");
int id = cr.getInt(i);
String name = cr.getString(n);
int price = cr.getInt(p);
フィールドのインデックスを
取得
Idは数値型なのでgetIntで取り出す
nameは文字列なので
getStringで取り出す
priceは数値型なのでgetIntで取り出す
⑥

データベースを閉じる
SQLによるデータベースの操作が終
わったら、最後に必ずcloseメソッドで
データベースを閉じます
db.close();
練習

右の図のようにデー
タをいくつか追加し
てみましょう
検索のオプション

SQLでは、ある条件に該当するデータ
のみを取り出したり、順番に並び替え
たりすることが出来ます
条件の指定

SELECT文の中で WHERE 条件 を追
加すると条件に合致したデータのみを
取り出すことが出来ます
例
SELECT * FROM product WHERE price>=200
数値による検索

例えばpriceが150以上であるデータだ
けを取り出したい時は以下のように書
きます
SELECT * FROM product WHERE price>=150
文字列による検索

例えばnameが鉛筆であるデータだけ
を取り出したい時は以下のように書き
ます
‘’で囲むのを忘れずに
SELECT * FROM product WHERE name='鉛筆'
文字列による検索

nameに特定の語句を含むデータだけ
を取り出したい時は以下のように書き
ます
‘%%’で囲むのを忘れずに
SELECT * FROM product WHERE name LIKE'%ン%'
並べ替え

SELECT文の中で ORDER BY フィール
ド名 をつけるとデータを指定した
フィールドが小さい順に並び替えます
SELECT * FROM product ORDER BY price
ファイルの有無の確認

作成したデータベースが、ちゃんと保
存されてるか確認してみましょう
FileListActivity.javaを実行してください
実行結果

データベースがあることがわかります
※画像は2つ作成した例
ソースコード
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.HORIZONTAL);
setContentView(ll);
ListView lv = new ListView(this);
File fl = new File("data/data/" + getPackageName());
①
String[] str = fl.list();
②
ArrayAdapter<String> ad = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, str);
lv.setAdapter(ad);
ll.addView(lv);
保存しているディレクトリ情報
の取得

Androidでは、data/data/(パッケージ名)ディ
レクトリにユーザーデータが保存されてい
るのでFileクラスを使って情報を取得します
File fl = new File("data/data/" +
getPackageName());
パッケージ名を取得するメソッド
存在するファイル名の取得

Fileクラスでユーザーデータがあるディレク
トリ情報を取得したらlistメソッドを使うだ
けで、そのディレクトリにあるファイル名
の一覧を文字列の配列で取得できます
String[] str = fl.list();
宿題
以下のファイルをzipファイルにまとめて期限
までに提出すること
1.
2.
前回の講義で作った絵を描くプログラム
実行結果のスクリーンショットとプログラムの説明を
Wordファイルにまとめる
提出先
:
[email protected]
[email protected]
締め切り:
6/16(土) 23:59
※ファイル名は(学籍番号).zipにしてください
課題
DBTestのデータベースにいくつかデー
タを追加し、priceが100以上のデータを
priceの値が低い順に並び替えて表示し
てみましょう
課題

EditTextを使って、
入力したデータを
データベースにつ
いかできるように
してみましょう
検索で使える演算子
演算子
効果
A == B
AとBが等しい
A <> B
AとBが等しくない
A>B
AがBより大きい
A >= B
AがBより大きいか等しい
A<B
AがBより小さい
A <= B
AがBより小さいか等しい
C1 AND C2
条件C1かつ条件C2が成り立つ
C1 OR C2
条件C1または条件C2が成り立つ
NOT C1
C1が成り立たない
SQLによる削除

削除にはDELETE FROM<削除するテーブ
ル><削除するフィールド> WHERE <削除
の条件>を使う
例
DELETE FROM product * WHERE name ==
‘鉛筆’

※条件に合致するデータが複数ある場合は全て
のデータが削除されるので注意