【教えてください】SQLite保存容量オーバー時のエラー処理方法

2,668 views
Skip to first unread message

micco

unread,
Oct 12, 2010, 11:53:22 PM10/12/10
to 日本Androidの会
こんにちは。
miccoです。

現在配信しているアプリでは、保存できるデータ数(SQLiteのレコード数)に
上限を設けています。
実際にダミーデータを保存して問題ない範囲で適当に制限してありますが、
上限を無くして欲しいという要望もあり、”容量が許す限り保存する”という仕
様に変更しようと思っています。

しかし、insert時に容量オーバーになった場合のエラー処理をどこでどう記述
しておくべきか分からず、困っております。
プログラムでエラー処理しなくとも、エラー表示&強制終了するだけかもしれ
ませんが、美しくありません。
皆さんがどのように記述しているか具体的なソースを参考にさせて頂ければ
嬉しいです。

またこのエラー処理をテストする良い方法もあればご教示ください。
実際に限界までダミーデータを保存するしかないでしょうか?

いつも質問ばかりで恐縮ですが、よろしくお願いいたします。

Katsuhisa Abe

unread,
Oct 13, 2010, 1:50:33 AM10/13/10
to android-g...@googlegroups.com
試していないの恐縮ですが,

> しかし、insert時に容量オーバーになった場合のエラー処理をどこでどう記述
> しておくべきか分からず、困っております。
> プログラムでエラー処理しなくとも、エラー表示&強制終了するだけかもしれ
> ませんが、美しくありません。
> 皆さんがどのように記述しているか具体的なソースを参考にさせて頂ければ
> 嬉しいです。

SQLiteDatabase.insert() の代わりに,SQLiteDatabase.insertOrThrow() を
用いて例外処理するのはいかがでしょうか。

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insertOrThrow(java.lang.String,
java.lang.String, android.content.ContentValues)

具体的には,SQLiteDatabase.insertOrThrow() は 例外発生時に
SQLException をなげるので,その SubclassFullException を catch して例外
処理します。

>
> またこのエラー処理をテストする良い方法もあればご教示ください。
> 実際に限界までダミーデータを保存するしかないでしょうか?

これは,自分も皆様に伺いたい内容です。

事例は異なりますが,大きなデータ量を扱う機能のテストをしたときは,
stub methodを用意してテストしましたが,
実際のトラフィックでテストしたのか?と指摘をうけて結局は
実際のデータで例外を発生させたときのログを用意しました。

--
Katsuhisa ABE <katsuh...@gmail.com>

みやけん

unread,
Oct 13, 2010, 6:52:25 AM10/13/10
to android-g...@googlegroups.com
こんばんは、みやけんです。

DBファイルの保存場所をSDカード側にして、ダミーファイル(容量いっぱい手前のファイル)を配置しておいて
テストするのはどうでしょうか?

そうすれば、DBにINSERTしてる間にファイルが書き込めなくなってエラーとなるはずです。

2010年10月13日12:53 micco <gou...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


ゆうしぐ

unread,
Oct 13, 2010, 6:59:25 AM10/13/10
to android-g...@googlegroups.com
こんばんは ゆうしぐです。
 
 
というサイトがありました。
ご確認ください。
 


 
2010年10月13日19:52 みやけん <miya...@gmail.com>:

micco

unread,
Oct 15, 2010, 11:42:28 PM10/15/10
to 日本Androidの会
みなさま

こんにちは。
miccoです。

コメントありがとうございました。
SQLiteDatabase.insertOrThrow() で例外処理を実装する方向で試してみます!


On 10月13日, 午後7:59, ゆうしぐ <yuusfact.s...@gmail.com> wrote:
> こんばんは ゆうしぐです。
>
> http://d.hatena.ne.jp/terurou/20100609/1276075829
>
> というサイトがありました。
> ご確認ください。
>
> 2010年10月13日19:52 みやけん <miyak...@gmail.com>:
>
>
>
> > こんばんは、みやけんです。
>
> > DBファイルの保存場所をSDカード側にして、ダミーファイル(容量いっぱい手前のファイル)を配置しておいて
> > テストするのはどうでしょうか?
>
> > そうすれば、DBにINSERTしてる間にファイルが書き込めなくなってエラーとなるはずです。
>
> > 2010年10月13日12:53 micco <gou...@gmail.com>:
>
> > こんにちは。
> >> miccoです。
>
> >> 現在配信しているアプリでは、保存できるデータ数(SQLiteのレコード数)に
> >> 上限を設けています。
> >> 実際にダミーデータを保存して問題ない範囲で適当に制限してありますが、
> >> 上限を無くして欲しいという要望もあり、”容量が許す限り保存する”という仕
> >> 様に変更しようと思っています。
>
> >> しかし、insert時に容量オーバーになった場合のエラー処理をどこでどう記述
> >> しておくべきか分からず、困っております。
> >> プログラムでエラー処理しなくとも、エラー表示&強制終了するだけかもしれ
> >> ませんが、美しくありません。
> >> 皆さんがどのように記述しているか具体的なソースを参考にさせて頂ければ
> >> 嬉しいです。
>
> >> またこのエラー処理をテストする良い方法もあればご教示ください。
> >> 実際に限界までダミーデータを保存するしかないでしょうか?
>
> >> いつも質問ばかりで恐縮ですが、よろしくお願いいたします。
>
> >> --
> >> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> >> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> >> このグループから退会するには、android-group-j...@googlegroups.com<android-gro-up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> >> 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-group-j...@googlegroups.com<android-gro-up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -
Reply all
Reply to author
Forward
0 new messages