スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SQLITEを使うpart2 ~DB操作

2011年01月10日 02:19

前回、DBを作成したので今回はDBを操作して
データの読み取り、挿入、削除、更新を行う。

1.DB操作前に

前回作成したSQLiteOpenHelperを継承したクラスのオブジェクトを作成し、 getWritableDatabase()でDBを書き込み可能(Selectの場合は読み取り専用でもOK)で開く。

今回は、これの戻り値を取得しとく。
(前回は、DBの構造を作成するだけの目的だったので呼ぶだけでよかった。)


2.データの挿入(Insert)
↓使用メソッド
table
テーブル名を指定する。
nullColumnHack
基本的にNullを指定する。
(少し調べたけど、使い方がよくわからない。すべてのフィールドがNullを許可している場合、全フィールドでNullのレコードを作成するのは出来ないから何かしら値を明示的に指定しなければいけない。とかなんとか…わかる人いたら教えてください。 でも、フィールドに入れる値は原則意識して設定すべきというのを前提にすればこの引数はnullを指定しとけばいいかな)
values
登録する値を設定した、ContentValuesインスタンスを指定する。
戻り値
Insertに失敗した場合は、-1を返す。それ以外は、挿入したレコード位置

↓使用例

3.データの更新(Update)
↓使用メソッド
table
テーブル名を指定する。
values
登録する値を設定した、ContentValuesインスタンスを指定する。
whereClause
SQLのWhere区に相当する部分を指定する。(検索条件)
whereArgs
whereClauseで"?"にした場合の、置き換えに使う。
戻り値
更新件数を返す。updateに失敗した場合は、-1を返す。

↓使用例①
↓使用例②
4.データの削除(Delete)
↓使用メソッド
table
テーブル名を指定する。
whereClause
SQLのWhere区に相当する部分を指定する。(検索条件)
whereArgs
whereClauseで"?"にした場合の、置き換えに使う
戻り値
削除した件数を返す。それ以外は0を返す。

↓使用例(whereArgsの指定の仕方は、updateと同じだから1個だけ)
5.データ抽出(Select)
データ抽出には、2種類方法があるけど好きなほうを使えばいい。
(SQL文を作るのに慣れているならrawQueryのほうが使いやすいかな?)
また、Selectは戻り値にカーソルを受け取る。
(カーソルとかの説明は、SQLについての解説を見てってことで…)
↓使用メソッド①
sql
SQL文を記述する。
selectionArgs
sqlで"?"にした場合の、置き換えに使う。

↓使用例①
↓使用メソッド②
distinct
レコードの重複を除外する場合は、Trueを指定する
table
テーブル名を指定する
columns
抽出するフィールドを指定する。
selection
SQLのWhere区に相当する部分を指定する。(検索条件)
selectionArgs
selectionで"?"にした場合の、置き換えに使う。
groupBy
SQLのgroupBy区に相当する部分を指定する。
having
SQLのhaving区に相当する部分を指定する。
orderBy
SQLのorderBy区に相当する部分を指定する。
limit
検索結果レコード数の上限を指定する。
戻り値
抽出結果のカーソルを返す。

↓使用例②
↓カーソル取得後のデータ取得方法例 コメント読めば何やってるかはわかってもらえると思う。
6.Select以外で共通して使える
↓使用メソッド
sql
SQL文を書く
bindArgs
SQLに"?"を指定した場合の置き換えに使う

ここらへんは、上と似たようなものだから使用例は省略

8.大量のデータを操作したい・トランザクション管理したい
上までのやり方は、常に一つ一つ更新していくメソッド。でも一つでも失敗したらすべてロールバックする時のやり方。それにこっちのほうが、commitが一回だけの分高速です。
↓使用例
トランザクション終了までに、コミットされていなければ自動でロールバックする。
これが一番個人的には使い勝手が良いような気がする。

9.最後にDBのクローズは忘れずに
でDBをオープンしたら、使われなくなった段階で クローズさせるようにしたほうがいい。

↓に今回いろいろ実験したソースを載せとく (エラー処理とか、ほとんどやってないけど) 今回、こんなにがんばるつもりじゃなかったんだが…(疲れたorz)
各ラジオボタンで指定した内容のDB操作をやっている。
DB作成時にデフォルトのデータを一括で登録している。
あとはコメント参考でわかってくれると思いたい。
SQLite自作ソース

Sample mainActivity.java
DatabaseHelper
main.xml


コメント

  1. | URL | -

    Re: SQLITEを使うpart2 ~DB操作

    ありがとうございました
    とても参考になりました
    今後ともよろしくお願いします

  2. 管理人 | URL | -

    Re: SQLITEを使うpart2 ~DB操作

    コメントありがとうございます。(・∀・)
    今後の記事もよろしくお願いします。

  3. John Doe | URL | -

    Re: SQLITEを使うpart2 ~DB操作

    nullColumnHackの意味は以下のサイトに書いてありました。

    http://stackoverflow.com/questions/2662927/android-sqlite-nullcolumnhack-parameter-in-insert-replace-methods

    全てのフィールドがnullかdefault値の列を挿入する場合、内容が空のContentValuesを渡すことになりますが、そのとき明示的にnull指定可能なフィールドを指定するためのものらしいです。

    Javadocの説明は、ちょっと解りにくい書き方ですね。

コメントの投稿

(コメント編集・削除に必要)
(管理者にだけ表示を許可する)

トラックバック

この記事のトラックバックURL
http://individualmemo.blog104.fc2.com/tb.php/49-f2621e7e
この記事へのトラックバック



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。