ListViewからSQLiteDatabaseのデータを削除する方法

428 views
Skip to first unread message

jiku

unread,
Jun 5, 2011, 7:54:50 AM6/5/11
to 日本Androidの会
初めまして、jikumaruと申します。
Androidはもちろん、プログラミング経験も浅い初心者ですがよろしくお願いします。

今回質問したいのは「ListViewのアイテムをクリックして、それに対応するSQLiteDatabaseのデータを削除する方法」です。

対象は入力と閲覧2つのアクティビティを持つアプリで、入力アクティビティで登録したSQLiteDatabaseのデータを、
SimpleCursorAdapterを介して閲覧アクティビティのListViewに表示させています。
データベースのカラムは以下のとおりです。
String COLUMN_ID = "_id";
String COLUMN_PRICE = "price";
String COLUMN_NAME = "name";
String COLUMN_CATEGORY = "category";
String COLUMN_YEAR = "year";
String COLUMN_MONTH = "month";
String COLUMN_DAY = "day";

ListViewのアイテムをタッチすることで、それに対応するデータを削除したいのですが

String ORDER_BY = COLUMN_YEAR+ ", " + COLUMN_MONTH + ", " +
COLUMN_DAY;
Cursor cursor = db.query(DB_TABLE, null, null, null, null, null,
ORDER_BY);

このようにORDER BYに_idではなく年月日を指定しているため、削除したいデータのidとListViewをクリックして得られるid(その
ListViewのアイテムの並び順のうちどこにあるか)が一致しないためSQLiteDatabseのデータを削除できないでいます。

どのようにすればListViewからSQLiteDatabaseのデータを削除できるようにすることができるのか、どうかよい解決方法を教えてくだ
さい。

五嶋克典

unread,
Jun 5, 2011, 8:47:34 AM6/5/11
to android-g...@googlegroups.com
五嶋と申します。

dayをキーに削除したいのであれば、where句の条件をdayにすれば良いし、
idで削除したいのであれば、idとdayのclassをListに入れるなり、
idとdayでmapに保存するなりしておけば良いと思いますよ。

jiku

unread,
Jun 6, 2011, 9:08:28 AM6/6/11
to 日本Androidの会
回答ありがとうございます!
そしてお久しぶりです五嶋さん、教室でお話を伺えてとても参考になりました。
こちらは残すところ1ヶ月で、そろそろ私も周りの方々も次を探し始めています。

アドバイスをもとにコードを書いてみました

class ItemData {
int id;
int price;
String name;
String category;
int year;
int month;
int day;
}

ArrayList<ItemData> itemList = new ArrayList<ItemData>();

String ORDER_BY = COLUMN_YEAR+ ", " + COLUMN_MONTH + ", " +
COLUMN_DAY;
Cursor c = db.query(DB_TABLE, null, null, null, null, null, ORDER_BY);

boolean isEof = c.moveToFirst();
while(isEof){
ItemData item = new Tasks(c .getInt(0), c.getInt(1),
c.getString(2), c.getString(3), c.getInt(4), c.getInt(5),
c.getInt(6));
itemList.add(item);
isEof = c.moveToNext();
}

こうすればlistViewで表示されるデータと同じ順番で並ぶコレクションが得られるので、ListViewから取得したidで
SQLiteDatabaseのデータを削除できるようになりました。


五嶋克典

unread,
Jun 6, 2011, 9:41:39 AM6/6/11
to android-g...@googlegroups.com
おお、ジクさんんだったんですね^^;
言われるまで気付きませんでした。。。

>こうすればlistViewで表示されるデータと同じ順番で並ぶコレクションが得られるので
通常ListViewはAdapterを使用するので、コレクションとListViewの並びは元々一致して
いますよ。
でも、コレクションとListViewの並びが一致しているしていないとは関係なく、削除はできます。
要は、何をwhere句のkeyにするかの問題です。

偶然にも、知り合いだということが判明したので、些細な助言も・・・

ArrayList<ItemData> itemList = new ArrayList<ItemData>();
は、通常

List<ItemData> itemList = new ArrayList<ItemData>();
とするのが、コレクションを使用する際の慣例です。
Listに入れておくと、後でArrayListをLinkedList等に変えたりするのも
容易なので、左辺は、List、Map等を持ってくるようにすることを薦めます。






jiku

unread,
Jun 7, 2011, 12:12:50 AM6/7/11
to 日本Androidの会
こちらも五嶋さんのお名前を見て驚きました
案外狭い世界ですね

いろいろと助言をいただき、ようやく削除機能をつけられるようになりました。
いつかAndroid開発に関われるようこれからも勉強の日々ですね、道は果てしなく遠いですが・・・

教室の皆さんから
「お仕事がんばってください、でもがんばりすぎないでください」
「いつか追いつけるようがんばります!」

それではお仕事がんばってください!
Reply all
Reply to author
Forward
0 new messages