データベースからデータの 読 み 込 み Cursorクラス



Similar documents
Microsoft Word - Android_SQLite講座_画面800×1280

Microsoft Word - Android_SQLite講座_画面800×1280

日 力力 生 行行 入 入 力力 生 用 方

テーブルの確認 sqlite>.tables.tables コマンドでデータベース内のテーブル一覧を表示する テーブルスキーマの表示 sqlite>.schema mytable.schema コマンドで指定のテーブルのスキーマを表示できる テーブル出力の整形.explain コマンドを使うと テー

1: Preference Display 1 package sample. pref ; 2 3 import android. app. Activity ; 4 import android. content. Intent ; 5 import android. content. Shar

せきゅりてぃ侍

Java演習(4) -- 変数と型 --

MetaMoJi ClassRoom/ゼミナール 授業実施ガイド

Microsoft PowerPoint - KeySQL50_10g_vlo3.ppt

About me! 足立昌彦 / +Masahiko.Adachi )! バイドゥ株式会社技術顧問 (Simeji)! 株式会社カブク Co-Founder! Google Developer Expert (Android)

(Microsoft Word - Excel\211\236\227p2\217\315.docx)

新・明解Java入門

マルチ OS エンジンを使用した固定記憶域の操作 (テクノロジー・プレビュー) - パート 2

Microsoft Word - サンプル _データベースアクセス_.doc

計算式の取り扱い

「給与・年金の方」からの確定申告書作成編

2 Wee とは Wee はホームページの 更 新 ツールです Wee は サイトの 枠 組 みをWeb 製 作 業 者 が 作 成 し 更 新 は お 客 様 に 自 由 にしていただこうというコンセプトの 製 品 です インターネットに 繋 がる 場 所 ならどこからでも ブラウザでホームページ

初 期 設 定 < 読 み 取 り 設 定 フォルダの 指 定 > 次 回 以 降 は 設 定 不 要 です 読 み 取 り 設 定 スキャナとの 連 携 <JPEG ファイル 方 式 ( 推 奨 )> PFU scansnap シリーズでは 必 ずこちらを 選 択 してください マークシートの J

tkk0408nari

PowerPoint Presentation

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

6 システムを 入 れているパソコンを 入 れ 替 えたいが どうしたらいいのか 元 のパソコンから 新 しいパソコンに 昨 年 度 入 力 データを 移 行 します 手 順 は 次 のとおりです 1 元 のパソコンでシステムを 起 動 して メニュー 画 面 から バックアップ リカバリ を 選

1

以 下 に 手 順 の 流 れを 記 載 します 3ページ 以 降 で 各 項 目 の 手 順 を 説 明 します ( をクリックすると 該 当 ページにジャンプします ) また 15ページに 汎 用 データ 受 入 に 関 する よくあるお 問 い 合 わせをご 紹 介 しています Step1 (

2016 年 度 情 報 リテラシー 三 科 目 合 計 の 算 出 関 数 を 用 いて 各 教 科 の 平 均 点 と 最 高 点 を 求 めることにする この2つの 計 算 は [ホーム]タブのコマ ンドにも 用 意 されているが 今 回 は 関 数 として 作 成 する まず 表 に 三 科

ALG ppt

Microsoft Word - Man_INSTALL_NSLNSL_Core+_Win7_JPNx.docx

untitled

パソコンバンクWeb21 操作マニュアル[導入・事前設定編]

Microsoft Word - 第3章.doc

Enterprise Architect日本語版 モデリング操作ガイド (データベースモデリング編)

年齢別人数計算ツールマニュアル

2.4 箇 条 書 のスタイルを 変 更 する 右 クリックして 箇 条 書 と 番 号 付 け を 選 択 する. あとは 少 し 遊 べば, このようなことをやりたい 人 は 理 解 できると 思 います 3 いろいろな 入 力 ワープロを 使 う 上 で 肝 心 な 点 は, 空 白 調 整

Microsoft Word - eラーニングFAQ_final.docx

Microsoft Word - 206MSAccess2013

(Microsoft PowerPoint - Ver12\203o\201[\203W\203\207\203\223\203A\203b\203v\216\221\227\277.ppt)

Microsoft Word doc

日 用 用 面 示 用 用 方

untitled

R4財務対応障害一覧

達人Cube Mini MN収集(Android版) 運用ガイド

AGT10 ( Android(TM) 4.1) ファームウェア更新方法

DN6(R04).vin

「1 所得税及び復興特別所得税の確定申告書データをお持ちの方」からの更正の請求書・修正申告書作成編

Vuzix M100 SDKインストールガイド

2 // TODO Auto-generated method stub float x = event.getx(); float y = event.gety(); String action = ""; switch(event.getaction()) { case MotionEvent.

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

目 次 1. ログイン/ログアウト 1.1 ログインする p ログアウトする p.3 2. 受 講 一 覧 画 面 p.4 3. 授 業 ページの 閲 覧 3.1 授 業 ページへの 遷 移 p 授 業 資 料 を IT s class.からダウンロードする p

Microsoft Word - 法人IBマニュアル_007.doc

t検定

001

プログラミング基礎I(再)

橡Taro9-生徒の活動.PDF

<4D F736F F D C97F195CF8AB DEC90E096BE8F912091E6312E313294C52E646F63>

オフィスソフトを操作するためのRTC群

スライド 1

Taro-twokansu3.jtd

PowerPoint プレゼンテーション

変 更 履 歴 日 付 Document ver. 変 更 箇 所 変 更 内 容 2015/3/ 新 規 追 加 2015/9/24 誤 字 修 正 2016/2/ 動 作 環 境 最 新 のものへ 変 更 全 体 オペレーター の 表 記 を 削 除 2016/5/

Microsoft PowerPoint ppt

PowerPoint プレゼンテーション

アドイン翻訳について

解きながら学ぶJava入門編

1: Android 2 Android 2.1 Android 4 Activity Android Service ContentProvider BroadcastReceiver Activity ( ): Android 1 Android Service ( ): ContentProv

Microsoft Word - TCⅡマニュアル_第6章_ doc

店舗用マニュアル

MapDK3のインストール

企業のおけるWebガバナンスの構築

以 下 に 手 順 の 流 れを 記 載 します 3ページ 以 降 で 各 項 目 の 手 順 を 説 明 します ( をクリックすると 該 当 ページにジャンプします ) また 4ページに 汎 用 データ 受 入 に 関 するよくあるお 問 い 合 わせをご 紹 介 しています Step (3ペー

1. 目 次 1. 目 次 2.はじめに 2-1.メールテンプレート 編 集 機 能 とは? 2-2. 対 象 読 者 3. 用 語 一 覧 4. 利 用 の 流 れ 4-1.メールテンプレート 編 集 の 流 れ 5. 機 能 説 明 利 用 方 法 5-1.テキストメール 編 集 開 封 率 を

Ⅰ 校 外 における 研 修 の 留 意 点 1 校 外 における 研 修 のコマ 数 の 考 え ア) 午 前 午 後 の 講 座 は 0.5 日 (0.5 コマ) イ) 全 日 の 講 座 は 1.0 日 (1.0 コマ) 2 校 外 における 研 修 として 選 択 できない 講 座 研 修

Office 10 パッケージ版「リンク集」

スライド 1

000_at700es2_manual_door_front

TopLink å SampleClient.java... 5 Ò readallsample() querysample() cachesample() Ç..

Microsoft Word - 03accessデータベース演習レジメ.doc

目 次 1. Web メールのご 利 用 について Web メール 画 面 のフロー 図 Web メールへのアクセス ログイン 画 面 ログイン 後 (メール 一 覧 画 面 ) 画 面 共 通 項 目

PowerPoint プレゼンテーション

EXCELレッスン 2

PowerPoint Presentation

設定フロー ★印は必須の設定です

内 容 Office2013 の 動 きが 変!... 3 Lesson の 機 能 を 使 ってみる... 5 LESSON2 表 入 力 を 簡 単 にする... 8 Lesson3 簡 単 分 析 LESSON4 書 式 の 設 定... 18

HK05

8 if switch for while do while 2

K227 Java 2

WebCaster600MNファームウェアバージョンアップ手順 (Macintosh編)

そして 取得した OutputStream インスタンスを使い 文字コードは UTF-8 として PrintWriter インスタンスを生成して あとは PrintWriter.append() で書き込みたい文字 列を渡して close() で保存する というだけです ファイルの読込み方法 それで

PowerPoint プレゼンテーション

Basic

2 科 学 研 究 費 助 成 事 業 のトップページ 画 面 が 表 示 されます [ 研 究 者 ログイン]をクリック します 掲 載 している 画 面 は 例 示 です 随 時 変 更 されます 3 科 研 費 電 子 申 請 システムの 応 募 者 ログイン 画 面 が 表 示 されます e

目 次 ログインする 前 に... 4 メンバー 管 理 編 ( 管 理 者 )... 5 ログインする... 6 トップページについて... 7 メンバー 管 理 をする... 8 メンバー 管 理 画 面 について 医 療 機 関 指 定 新 規 追 加 指 定...

Firebase Analytics手順書_R2

- INDEX - 1 ご 利 用 時 間 1 2 メニュー 1 3 ご 利 用 になる 前 に 行 っていただきたいこと 3 (1) 所 在 地 沿 線 設 定 3 (2) 会 員 情 報 の 管 理 ( 自 社 情 報 の 設 定 ) 5 4 物 件 情 報 の 登 録 8 (1) 操 作 概

2016 年 度 情 報 リテラシー 変 更 された 状 態 同 様 に 価 格 のセルを 書 式 設 定 する 場 合 は 金 額 のセルをすべて 選 択 し [ 書 式 ]のプルダウンメニューか ら[ 会 計 ]を 選 択 する すると が 追 加 され 金 額 としての 書 式 が 設 定 さ

目 次 電 子 申 請 を 使 用 した 申 請 の 流 れ 1ページ 申 請 書 ( 概 算 保 険 料 申 告 書 )の 作 成 2ページ 作 成 した 申 請 書 の 送 信 31ページ 状 況 照 会 電 子 納 付 を 行 う 62ページ 返 送 書 類 の 取 得 75ページ お 問 い

同 期 を 開 始 する( 初 期 設 定 ) 2 1 Remote Link PC Sync を 起 動 する 2 1 接 続 機 器 の [PIN コード ] [ ユーザー 名 ] [ パスワード ] を 入 力 する [PIN コード ] などの 情 報 は 接 続 機 器 の 設 定 画 面

データベースS 演習資料

S2DaoでもN:Nできます

PowerPoint プレゼンテーション

4 応 募 者 向 けメニュー 画 面 が 表 示 されます 応 募 者 向 けメニュー 画 面 で [ 交 付 内 定 時 の 手 続 を 行 う] [ 交 付 決 定 後 の 手 続 を 行 う]をクリックします 10

Transcription:

アンドロイドのデータベースについて SQlite

データベースからデータの 読 み 込 み Cursorクラス

Cursorでデータをとってきます // 注 意 定 数 でDatabaseクラスの 中 にあるとします public static final String ID = " id"; public static final String NAME = "_name"; // 例 えばこんなデータベースがあるとして(SQLiteOpenHelperクラスを 継 承 したもの) Database database = new Database(context); //データベースからとってくるカラム final String[] PROJECTION = { Database.ID, Database.NAME ; //データベースからデータをCursorで 取 ってくる Cursor c = database.query( Database.TABLENAME, PROJECTION, null, null, null, null, Database.TABLE_COLUMNS.ID + " ASC" );

CursorをmoveToFirst()を 最 初 にやって movetonext()で 次 のデータへ 進 めます Cursorはイテレータです //カラムは 何 番 目 かをとってくる int idxid = c.getcolumnindex(database.id); int idxname = c.getcolumnindex(database.name); //これを 忘 れると カーソル-1 番 目 から 始 まってエラー c.movetofirst(); if ( c.getcount() > 0 ) //カーソルのデータ 数 取 得 { do { int id = c.getint(idxid); String name = c.getstring(idxname); //なにかの 処 理 while ( c.movetonext() ); //クローズしないとリーク! c.close(); database.close();

>クエリの 発 行 ( SQLiteDatabaseクラス ) //データベースからとってくるカラム final String[] PROJECTION = { Database.ID, Database.NAME ; この 順 番 でCursorに 値 がはいる SQLiteDatabase.query( テーブル 名, カラムの 名 前 が 入 ったString 配 列 ( 上 のPROJECTION), クエリー, SelectionArgs(String 配 列 ), GroupBy, Having, ソート 順 ); SelectionArgsはクエリーのところで ID =? or price =? として String[] selectionargs = { 10, 100 ; を 設 定 すると? のとこが 左 から 順 に 置 き 換 わる ID = 10 or Price = 100 となる 使 わないかも( 汗

>Cursorについて カーソルのインデックス 番 号 0 番 に 戻 す movetofirst() カーソルのインデックス 番 号 を 次 へ 進 める movetonext() カーソルのインデックス 番 号 をNum 番 まで 進 める MoveToPosition( Num ) カーソルのRowの 数 を 得 る(データの 数 ) getcount() カラム 番 号 の 値 をそれぞれの 型 で 受 け 取 る getint( カラム 番 号 ) getstring( カラム 番 号 ) getfloat( カラム 番 号 ) getboolean( カラム 番 号 ) カーソルのカラム 名 から 何 番 目 にアクセスすればいいかを 得 る getcolumnindex( カラムの 名 前 (String) ) カーソルを 閉 じる close()

>DDMSの 画 面 Cursorをクローズしなければ DDMSで 表 示 されます 緑 文 字 (info)なので メモリリークにはなってないかもしれません (OS1.6では 赤 字 (error)でleak found!と 表 示 されていた)

Cursorからデータを 取 ってくるとき インデックスの 番 号 で 取 得 することになります 2 通 りの 方 法 があります 1カラムの 番 号 を 直 接 いれる String name = Cursor.getString(1); 2 最 初 に 一 度 カラムの 番 号 をカラム 名 で 問 い 合 わせておく (Database.Nameはstatic final String Name = _name ;) Int idxname = Cursor.getColumnIndex( Database.Name ); String name = Cursor.getString( idxname ); 結 果 は 同 じですが 1はあとでソースを 見 たときにさっぱりわからない 2がお 勧 めです

Cursorの 中 身 をデバッグなどで 簡 単 に 表 示 したい 場 合 Logクラスを 使 用 すると ログ 出 力 できます DDMSなどで 確 認 できます しかし 自 前 でログ 出 力 を 作 りたくない そんなとき! ログ 出 力 の 際 に Cursorの 中 身 をログ 出 力 してくれる 便 利 なクラス android.database.databaseutils.dumpcursor(cursor); ログ 出 力 の 中 身

Cursorを 自 分 で 作 りたい 場 合 final String[] projection = { "id","color" ; MatrixCursor c = new MatrixCursor(projection); c.addrow( new Object[]{ 1,"blue" ); c.addrow( new Object[]{ 2,"red" ); c.addrow( new Object[]{ 3,"green" ); c.addrow( new Object[]{ 4,"pink" ); c.addrow( new Object[]{ 5,"white" ); MatrixCursorを 使 えば 作 れますが なかなか 用 途 は 思 いつきません( 汗

データベースクラスの 作 り 方 SQLiteOpenHelperクラス

データベースを 操 作 する 前 段 階 として 面 倒 な 問 題 があります データベースのファイルはすでに 存 在 するか ない 場 合 は ファイル 作 成 テーブル 作 成 データベースのバージョンは 同 じか 同 じでないなら アップグレード(テーブル カラムの 追 加 等 ) Cursorでデータの 読 み 出 し

SQLiteOpenHelperクラスはそれをやってくれます public class Database extends SQLiteOpenHelper { public Database(Context context, String name, CursorFactory factory,int version) { super(context, name, factory, version); // name は ファイル 名 (ファイル 名 のみ!ファイルパス 付 は 不 可 ) // factory は 不 明 ( 汗 // version はデータベースバージョン( 自 分 で 決 める) @Override public void oncreate(sqlitedatabase db) { // ファイルがない 場 合 に 呼 ばれる @Override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { // バージョンが 違 うときに 呼 ばれる

SQLiteOpenHelperを 実 装 したとき データベースのファイルはすでに 存 在 するか oncreate() ない 場 合 は ファイル 作 成 テーブル 作 成 データベースのバージョンは 同 じか OnUpgrade() 同 じでないなら アップグレード(テーブル カラムの 追 加 等 ) Cursorでデータの 読 み 出 し

注 意 点 端 末 内 のデータベースファイルからの 読 み 出 しか メモリ 上 のデータベースしか 操 作 できない data/data/ アプリ / databaseにあるdata.dbを 使 う New Database( context, data.db, null, 1 ); メモリ 上 だけで 使 う New Database( context, null, null, 1 ); OnUpgrade()でアップグレード 処 理 を 書 いても インストールされたときはonCreate()しか 呼 ばれない oncreate()に 最 終 的 なバージョンのテーブル 作 成 などの 処 理 を 書 かないと インストールした 人 はみ んな 開 いた 瞬 間 エラー!

public class Database extends SQLiteOpenHelper { protected SQLiteDatabase mwritable = null; protected SQLiteDatabase mreadable = null; public Database(Context context, String name, CursorFactory factory,int version) { super(context, name, factory, version); mwritable = getwritabledatabase(); mreadable = getreadabledatabase(); // 以 下 はSQLiteHelperクラスには 用 意 されていない 自 作 です public Cursor query(string table, String[] columns, String selection, String[] selectionargs, String groupby, String having, String orderby) { Cursor c = mreadable.query(table, columns, selection, selectionargs, groupby, having, orderby); c.movetofirst(); return c; public void update(string table, ContentValues values, String whereclause) { mwritable.update(table, values, whereclause, null); public void insert(string table, ContentValues values) { mwritable.insert(table, null, values);

close()し 忘 れると エラーです 絶 対 に 閉 めましょう! public Database(Context context, String name, CursorFactory factory,int version) { super(context, name, factory, version); mwritable = getwritabledatabase(); mreadable = getreadabledatabase(); @Override public synchronized void close() { super.close(); mwritable.close(); mreadable.close();

Close()しないと ログでエラーが!

SQLiteの 再 構 成 は vacuum 定 期 的 にこれしないと deleteされたデータなんかが 残 って ファイルサイズが でかくなります public void vacuum() { mwritable.execsql("vacuum");

高 速 にデータを 取 り 出 して 加 工 して 挿 入! db.begintransaction(); try { SQLiteStatement stmt = db.compilestatement("insert into table values (?);"); for (String s : array) { stmt.bindstring(1, s); stmt.executeinsert(); //これを 呼 びださなければ ロールバックされる db.settransactionsuccessful(); finally { db.endtransaction();

ContentsProvider Cursorクラス

コンテンツプロバイダを 使 えば 1 行 で 簡 単 取 得! URIで データを 取 得 できます 別 アプリからでもOK! public class main extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); //SDカードの 曲 を 取 得 Cursor c = this.getcontentresolver().query( android.provider.mediastore.audio.media.external_content_uri, null, null, null, null);

マニュフェストファイルに URIを 書 きこむ! <provider android:authorities="jp.test.testdatabase" android:name=".dataprovider" /> ContentProviderを 継 承 して Query, insert, update などのメソッドを 書 くだけで 使 え ます! public class DataProvider extends ContentProvider { @Override public Cursor query(uri uri, String[] projection, String selection, String[] selectionargs, String sortorder) { @Override public Cursor query(uri uri, String[] projection, String selection, String[] selectionargs, String sortorder) {

Query, Insert, update, delete 以 外 にもなにかやりたければ URIにごりごり 追 加 して URI 解 析 してやります URIMATCHER = new UriMatcher(UriMatcher.NO_MATCH); URIMATCHER.addURI(AUTHORITY, "ほかの 処 理 1", 1); URIMATCHER.addURI(AUTHORITY, "ほかの 処 理 2", 2); int type = URIMATCHER.match(uri); switch ( type ) { Case 1: ほかの 処 理 1 break; Case 2: ほかの 処 理 2 break;

ありがとうございました!