330 likes | 490 Views
データベース. 6/15. 前回の内容. エラー がでた時の対処法 画像の読み込みと表示 画像の回転 画像の拡大 図形の描画. 本日の内容. データベースの利用 検索のオプション ファイルの有無の確認 宿題に ついて. データベースの利用. Android には SQLite というデータベースが搭載されています。. データベース と は?. データベースとは、 相互に関連するデータを整理・統合し、検索しやすくしたファイル。また、このようなファイルの共用を可能にするシステム。. 例:ある コンビニのデータベース. フィールド. テーブル.
E N D
データベース 6/15
前回の内容 • エラーがでた時の対処法 • 画像の読み込みと表示 • 画像の回転 • 画像の拡大 • 図形の描画
本日の内容 • データベースの利用 • 検索のオプション • ファイルの有無の確認 • 宿題について
データベースの利用 • AndroidにはSQLiteというデータベースが搭載されています。
データベースとは? • データベースとは、相互に関連するデータを整理・統合し、検索しやすくしたファイル。また、このようなファイルの共用を可能にするシステム。 例:あるコンビニのデータベース フィールド テーブル 商品テーブル 顧客テーブル データ
データベースを操作するには • SQL(Structured Query Language:構造化問合せ言語)を使い、データの挿入や取り出す条件などを指定する データベース SQL 処理の結果
実行結果 • DBTestActivity.javaを実行してみましょう
ソースコード String str = "data/data/" + getPackageName() + "/Sample2.db"; SQLiteDatabasedb = 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()) { inti = cr.getColumnIndex("id"); intn = cr.getColumnIndex("name"); intp = cr.getColumnIndex("price"); intid = cr.getInt(i); String name = cr.getString(n); intprice = 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等でデータの型に合わせて取り出します inti = 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つ作成した例
ソースコード LinearLayoutll = new LinearLayout(this); ll.setOrientation(LinearLayout.HORIZONTAL); setContentView(ll); ListViewlv = 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ファイルにまとめて期限までに提出すること • 前回の講義で作った絵を描くプログラム • 実行結果のスクリーンショットとプログラムの説明をWordファイルにまとめる 提出先 : toshihiro.tamura.3k@stu.hosei.ac.jp rhuang@hosei.ac.jp 締め切り: 6/16(土) 23:59 ※ファイル名は(学籍番号).zipにしてください
課題 DBTestのデータベースにいくつかデータを追加し、priceが100以上のデータをpriceの値が低い順に並び替えて表示してみましょう
課題 • EditTextを使って、入力したデータをデータベースについかできるようにしてみましょう
SQLによる削除 • 削除にはDELETE FROM<削除するテーブル><削除するフィールド> WHERE <削除の条件>を使う 例 DELETE FROM product * WHERE name == ‘鉛筆’ • ※条件に合致するデータが複数ある場合は全てのデータが削除されるので注意