狠狠撸

狠狠撸Share a Scribd company logo
Androidで
ActiveRecordライクに
DBを扱う
@kurobara

1
アジェンダ
? ActiveAndroidとは
? インストール方法
? 設定
? モデル定義
? insert処理
? delete処理
? クエリ
2
こんなコード書きたいです?
?
?

コードに生のSQL処理
カーソルを使ってオブジェクトへのマッピング

3
ActiveAndroidとは
? Android向けのO/Rマッパー
? ActiveRecordモデルがベース
? 面倒なDBへのアクセスが容易になる
? 設定内容が非常にシンプル
? 現在も開発は継続中
? ドキュメントは少ない???
? https://github.com/pardom/ActiveAndroid
4
インストール方法
?
?

以下の手順でビルドします
ビルド後に、Andoridプロジェクトのビルドパ
スに追加します

$ git clone https://github.com/pardom/ActiveAndroid.git
$ cd ActiveAndroid
$ sh gradlew build

どちらか好きな方法で

$ mvn clean install
5
利用設定
? 以下の2種類の設定方法があります。
? AndroidManifest.xmlに記述
? コードで詳細設定を記述

6
AndroidManifestに記述
?

以下のような形でAndoroidManifest.xmlに記述します。

?

これがActiveAndroidにおける最低限の規約です。
初期化設定
DBとバージョン設定
a

7
詳細設定方法(1/3)
?

ソースコード上で設定する場合、以下を用意します

?
?

?

Applicationクラスを継承したクラス
AndroidManifest.xmlに上記クラスを指定

既存のコード(既にアプリがある)でアプリケーション
クラスを継承している時の為に使用

?

ライブラリを作るとき等に使う場合に使用

8
詳細設定方法(2/3)
?

設定できる内容は、以下のものです。

?

データベース名

?

データベースバージョン

?

キャッシュサイズ(デフォルトは1KByte)

?

モデルに使うクラス指定

?

モデルの型情報をシリアライズするクラス指定

9
詳細設定方法(3/3)
?

以下のような感じで設定を実装します。

AtiveAndroidの設定
a

第2引数はログ

停止処理

10
モデル定義 (1/4)
?

RubyのActiveRecordのモデル定義

Rails3.x系の定義
validation有

Rails4.x系の定義

11
モデルの定義 (2/4)
?
?

ActiveAndroidのモデル定義
他のORMにもあるようなアノテーションで設定
テーブル名の設定
Modelクラスの継承
対象カラム名と制約の設定

12
?

モデルの定義 (3/4)
アノテーションに設定できる内容

?
?

テーブル名とカラム名が必須項目
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

13
モデルの定義 (4/4)
?
?

Hogeが1に対してItemが複数の関連がある場合
Hoge側にヘルパーメソッドを定義

外部キーのカラム名

14
insert処理 (1/3)
?

ActiveRecordのコード

?

?

インスタンスを用意し、値を設定、最後にsaveメソッドを実行

実行されるSQL

15
insert処理 (2/3)
?

ActiveAndroidのコード

?

ActiveRecordと同じコードが書ける

?

?

アクセッサ次第だが???

実行されるSQL(ActiveRecordと同じ)

16
insert処理 (3/3)
?

トランザクションとバルクインサート

?
?

トランザクション中に複数回、saveメソッドを実行すればよい
rollbackについてはモデルにて定義しておくこと
トランザクション
開始

トランザクション
成功

トランザクション
終了

17
delete処理 (1/4)
?

delete処理は3種類

?

オブジェクトをロードしてから削除する方法

?

静的メソッドを使用して削除する方法

?

クエリを組み立てて削除する方法

18
delete処理 (2/4)
?

オブジェクトをロードしてから削除する方法

?

主キーを指定することでitemオブジェクトを取得できる

?

modelクラスが持つdeleteメソッドで削除実施

19
delete処理 (3/4)
?

静的メソッドを使用して削除する方法

?

対象テーブルと主キーが分かってる場合、一番便利

?

前ページのような無駄なselectクエリを発行しなくて済む

20
delete処理 (4/4)
?

クエリを組み立てて削除する方法

?

複数の行データを削除できる

?

直感的に使えるので、扱いやすい

?

扱い易い反面、プレースホルダが面倒???

21
クエリ (1/3)
?

ActiveAndroidの検索クエリ

?

?

直感的にSQLを書くような形で使用できる

(参考) s2jdbcのクエリ

?

s2jdbcの使用経験があれば、理解しやすい

22
クエリ (2/3)
?

where句を付け、idでソートする

?

where句はメソッドチェーンにはできないことに注意

?

offsetとlimitをつけることもできる

?

groupByやhavingを使うこともできる

23
クエリ (3/3)
?

テーブル結合を行うようなクエリは注意

?
?
?

クエリ生成は、ActiveAndroidで実施
クエリ実行結果を自分でcursor操作する必要がある
静的型付け言語故、結果のカラムが変わる場合に対応しきれない

?

別々のテーブルにクエリ投げてから、コード上でjoin出来なくもないけど???

24
まとめ
? ActiveRecordライクなので、扱い易い
?

s2jdbcの使用経験があれば学習コストは低い
と言えそう

? Modelクラスを継承したクラスを作るだ
けで、面倒な処理を大幅に軽減できる
? 一方で、以下の点に注意
? テーブル定義にコードが引きづられや
すくなること
? 複雑なクエリの場合、手間がかかる
25
Ad

Recommended

Active Directoryデータの "大きい整数"
Active Directoryデータの "大きい整数"
Michio Koyama
?
20181031 springfest spring data geode
20181031 springfest spring data geode
Masaki Yamakawa
?
Active Directoryデータのプロパティ出力(Output Properties)
Active Directoryデータのプロパティ出力(Output Properties)
Michio Koyama
?
はじめてのCouch db
はじめてのCouch db
Eiji Kuroda
?
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
Yohei Sasaki
?
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
Atsuo Yamasaki
?
Synthesijer - HLS frineds 20190511
Synthesijer - HLS frineds 20190511
Takefumi MIYOSHI
?
Teclab3
Teclab3
Eikichi Yamaguchi
?
.NETからActive Directoryデータにアクセス ~組織単位(OU)情報の取得と表示~
.NETからActive Directoryデータにアクセス ~組織単位(OU)情報の取得と表示~
Michio Koyama
?
Caliban: Functional GraphQL Library for Scala
Caliban: Functional GraphQL Library for Scala
Pierre Ricadat
?
Springて?dao 20070413
Springて?dao 20070413
Funato Takashi
?
.NETからActive Directoryデータにアクセス ~プリンタ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~プリンタ情報の取得と表示~
Michio Koyama
?
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
Naoyuki Yamada
?
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
Michio Koyama
?
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
Michio Koyama
?
ScalaMatsuri 2016
ScalaMatsuri 2016
Yoshitaka Fujii
?
厂辞濒谤と贰濒补蝉迟颈肠蝉别补谤肠丑の比较
厂辞濒谤と贰濒补蝉迟颈肠蝉别补谤肠丑の比较
genta kaneyama
?
Xslt
Xslt
kmiyako
?
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207
Jun Ohtani
?
.NETからActive Directoryにアクセス
.NETからActive Directoryにアクセス
Michio Koyama
?
Jetpack datastore入門
Jetpack datastore入門
furusin
?
.NETからActive Directoryデータにアクセス ~コンピュータ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~コンピュータ情報の取得と表示~
Michio Koyama
?
箩蚕耻别谤测超入门编
箩蚕耻别谤测超入门编
Yasuhito Yabe
?
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
Fujio Kojima
?
Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用
Masafumi Okada
?
搁と颁顿滨厂颁
搁と颁顿滨厂颁
Masafumi Okada
?

More Related Content

What's hot (20)

.NETからActive Directoryデータにアクセス ~組織単位(OU)情報の取得と表示~
.NETからActive Directoryデータにアクセス ~組織単位(OU)情報の取得と表示~
Michio Koyama
?
Caliban: Functional GraphQL Library for Scala
Caliban: Functional GraphQL Library for Scala
Pierre Ricadat
?
Springて?dao 20070413
Springて?dao 20070413
Funato Takashi
?
.NETからActive Directoryデータにアクセス ~プリンタ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~プリンタ情報の取得と表示~
Michio Koyama
?
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
Naoyuki Yamada
?
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
Michio Koyama
?
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
Michio Koyama
?
ScalaMatsuri 2016
ScalaMatsuri 2016
Yoshitaka Fujii
?
厂辞濒谤と贰濒补蝉迟颈肠蝉别补谤肠丑の比较
厂辞濒谤と贰濒补蝉迟颈肠蝉别补谤肠丑の比较
genta kaneyama
?
Xslt
Xslt
kmiyako
?
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207
Jun Ohtani
?
.NETからActive Directoryにアクセス
.NETからActive Directoryにアクセス
Michio Koyama
?
Jetpack datastore入門
Jetpack datastore入門
furusin
?
.NETからActive Directoryデータにアクセス ~コンピュータ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~コンピュータ情報の取得と表示~
Michio Koyama
?
箩蚕耻别谤测超入门编
箩蚕耻别谤测超入门编
Yasuhito Yabe
?
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
Fujio Kojima
?
Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用
Masafumi Okada
?
搁と颁顿滨厂颁
搁と颁顿滨厂颁
Masafumi Okada
?
.NETからActive Directoryデータにアクセス ~組織単位(OU)情報の取得と表示~
.NETからActive Directoryデータにアクセス ~組織単位(OU)情報の取得と表示~
Michio Koyama
?
Caliban: Functional GraphQL Library for Scala
Caliban: Functional GraphQL Library for Scala
Pierre Ricadat
?
.NETからActive Directoryデータにアクセス ~プリンタ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~プリンタ情報の取得と表示~
Michio Koyama
?
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
Naoyuki Yamada
?
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~ユーザ情報の取得と表示~
Michio Koyama
?
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~グループ情報の取得と表示~
Michio Koyama
?
厂辞濒谤と贰濒补蝉迟颈肠蝉别补谤肠丑の比较
厂辞濒谤と贰濒补蝉迟颈肠蝉别补谤肠丑の比较
genta kaneyama
?
Elasticsearch入門 pyfes 201207
Elasticsearch入門 pyfes 201207
Jun Ohtani
?
.NETからActive Directoryにアクセス
.NETからActive Directoryにアクセス
Michio Koyama
?
Jetpack datastore入門
Jetpack datastore入門
furusin
?
.NETからActive Directoryデータにアクセス ~コンピュータ情報の取得と表示~
.NETからActive Directoryデータにアクセス ~コンピュータ情報の取得と表示~
Michio Koyama
?
箩蚕耻别谤测超入门编
箩蚕耻别谤测超入门编
Yasuhito Yabe
?
C# LINQ ~深く知って、使いまくろう~
C# LINQ ~深く知って、使いまくろう~
Fujio Kojima
?
Rとcdisc@moss10 公開用
Rとcdisc@moss10 公開用
Masafumi Okada
?

础苍诲谤辞颈诲で础肠迟颈惫别搁别肠辞谤诲ライクに顿叠を使う