AndroidのSQLiteのメモ書き
放置していた漢詩アプリ作成を始めてるのだけど、ぶっちゃけ構造自体はいたってシンプルに作成出来たのですが、その時に気付いた事をメモ書きしています。
まぁこれもAndroidでSQLを使ってみるのが目的なだけの単純なアプリですけどね。
※メモ書きで1時間程度でさくっと書いたブログなので超適当です!
SQLiteOpenHelperとSQLiteDatabase
SQLiteOpenHelperとSQLiteDatabaseを使ってテーブル作成や検索、追加、削除等クリエ発行が出来ます。
ってこんなの今更書く必要もないのだけど、実際に使うに当たって自分なりのやり方をメモ書き。サンプルがそれぞれのクラスで実装してる為、コードが多くなるのが嫌だったのでシンプルにしたかったのです。
![SQLiteOpenHelperと利用するクラスとの関係](https://stat.ameba.jp/user_images/20140519/23/i-yumekibun/3d/fd/p/o0380032812946662858.png?caw=800)
まぁこの図以外のクラスももちろんあるけど、この図の通り。あくまでも参考です。それぞれのクラスでSQLiteOpenHelperをextendsしたクラスへクリエを発行し、必要なデータを取得するという感じ。
検索、削除等のクリエの発行はSQLiteDatabaseをextendsしてそれぞれのクラスから利用。
2つのクラスの違いは、ここに漂流して辿り着いた方々は分かってるはずなので割愛。まぁ基本なので調べたらすぐ分かりますよね。
![漢詩アプリの画面遷移図](https://stat.ameba.jp/user_images/20140519/23/i-yumekibun/a5/b0/p/o0800043312946662860.png?caw=800)
因みにこれが漢詩アプリの大体の画面遷移図。
下の図を見てもらえば分かるようにコード自体も大して難しくない。
![SQLiteOpenHelperの実装例](https://stat.ameba.jp/user_images/20140519/23/i-yumekibun/1f/1e/p/o0797053912946662861.png?caw=800)
SQLiteOpenHelperの実装例。テストなのでいたってシンプル。データが多い場合はexecSQLよりbeginTransaction()~の決まった型を使った方が高速。
因みに「create table if not exists table名」とすると、テーブルが作成されていない場合のみテーブルが作成されます。
![Android queryの例](https://stat.ameba.jp/user_images/20140519/23/i-yumekibun/44/c1/p/o0727026712946662859.png?caw=800)
Android queryの使用例。第2引数は予めString[] colum = new String {1,2,3...}という配列を作成して入力してます。LIKEで曖昧検索する際の正規表現の入力方法等は必要があれば調べてメモしておけばいいのではないかと思う。この例では完全一致なので曖昧検索はしていないけどね。
![Android queryで取得したデータをアダプターに代入](https://stat.ameba.jp/user_images/20140519/23/i-yumekibun/8b/dc/p/o0750019212946662862.png?caw=800)
Android queryで取得したデータをリスト表示する為にアダプターに代入する例。
まぁ思いっきり端折ってますが、これだけでも何となく分かるかと思います。
data.cursor~としてるのはもちろんこのクラスでhelperをextendsしてるのではなく、Dataクラスにextedsさせて、各クラスでData data = new Data(this,DB_NAME,null,DB_VERSION);としてインスタンス化して使用してるからです。この方がシンプルでしょう。
つまるところ、AndroidのSQLは、SQL自体は分かるのだけど、「""」でくくるのか、「''」で括るのか、どのメソッドでクリエ発行すればいいのか等、Javaでどう記入したらいいのかという決まり事にちょっと悩む程度だと思いました。
因みにアプリの漢詩データはまた仕事が忙しくなったので、まだ半分も入力できてないw まぁ骨組み→デザイン→最後にデータをINSERTという感じで作ります。