開源学習百度推送実戦プロジェクト友談(六)


この文章は「友聊」オープンソースプロジェクト学習シリーズの6編目で、最初の5編はここを見てください.
友談学習記録(一)
友談学習記録(二)
友談学習記録(三)
友談学習記録(四)
友談学習記録(五)
主に友談プロジェクトにおけるデータベースSQLiteの使用と処理を記録する.
2つのSQLiteチュートリアルのウェブサイト、**SQLiteチュートリアル(1)とSQLiteチュートリアル(2)**をお勧めします.これまでのプロジェクトでは、データベースを使用したことがありませんでした.この機会を利用して、データベースに関する知識を学びます.
エンティティークラスBeanの設計.ここで使用するエンティティークラスには、Message,MessageItem,RecentItem,Userがあります.MessageとMessageItemの違いはよくわかりませんが、データベースにはMessageItemが格納されています.RecentItem、最近の連絡先;Userはユーザー情報を保存します.
データベース操作クラスには、MessageDB、メッセージの管理、保存、取得、新規受信の未読メッセージがあります.
RecentDB、最近の連絡先、保存、取得、削除、ソート.
UserDB、連絡先の管理、削除・変更、並べ替えが必要です.
以下は主にUserDBの中のコードを見てみましょう.他のいくつかのファイルは似ています.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// UserDB      UserDBHelper    

private UserDBHelper helper;

    public UserDB(Context context) {
        helper = new UserDBHelper(context);
    }

//UserDBHelper    

public class UserDBHelper extends SQLiteOpenHelper{
    public static final String USER_DBNAME = "user.db";
    public UserDBHelper(Context context) {
        super(context, USER_DBNAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE table IF NOT EXISTS user"
                + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, userId TEXT, nick TEXT, img TEXT, channelId TEXT, _group TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("ALTER TABLE user ADD COLUMN other TEXT");
    }

ユーザidに基づいてユーザ情報を照会する
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
public User selectInfo(String userId) {
        User u = new User();
        SQLiteDatabase db = helper.getReadableDatabase();
        Cursor c = db.rawQuery("select * from user where userId=?",
                new String[] { userId + "" });
        if (c.moveToFirst()) {
            u.setHeadIcon(c.getInt(c.getColumnIndex("img")));
            u.setNick(c.getString(c.getColumnIndex("nick")));
            u.setChannelId(c.getString(c.getColumnIndex("channelId")));
            u.setGroup(c.getInt(c.getColumnIndex("_group")));
        } else {
            return null;
        }
        return u;
    }

ユーザーの追加
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
public void addUser(User u) {
        //       
        if (selectInfo(u.getUserId()) != null) {
            //      
            update(u);
            return;
        }
        //     
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL(
                "insert into user (userId,nick,img,channelId,_group) values(?,?,?,?,?)",
                new Object[] { u.getUserId(), u.getNick(), u.getHeadIcon(),
                        u.getChannelId(), u.getGroup() });
        db.close();

    }

複数のユーザーの追加
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
public void addUser(List<User> list) {
        SQLiteDatabase db = helper.getWritableDatabase();
        for (User u : list) {
            // **          **
            db.execSQL(
                    "insert into user (userId,nick,img,channelId,_group) values(?,?,?,?,?)",
                    new Object[] { u.getUserId(), u.getNick(), u.getHeadIcon(),
                            u.getChannelId(), u.getGroup() });
        }
        db.close();
    }

ユーザー情報の更新
1
2
3
4
5
6
7
8
public void update(User u) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL(
                "update user set nick=?,img=?,_group=? where userId=?",
                new Object[] { u.getNick(), u.getHeadIcon(), u.getGroup(),
                        u.getUserId() });
        db.close();
    }

最新ユーザー情報の取得
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
public User getLastUser() {
        SQLiteDatabase db = helper.getWritableDatabase();
        Cursor c = db.rawQuery("select * from user", null);
        User u = new User();
        while (c.moveToLast()) {
            u.setUserId(c.getString(c.getColumnIndex("userId")));
            u.setNick(c.getString(c.getColumnIndex("nick")));
            u.setHeadIcon(c.getInt(c.getColumnIndex("img")));
            u.setChannelId(c.getString(c.getColumnIndex("channelId")));
            u.setGroup(c.getInt(c.getColumnIndex("_group")));
        }
        c.close();
        db.close();
        return u;
    }

すべてのユーザー情報の取得
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
public List<User> getUser() {
        SQLiteDatabase db = helper.getWritableDatabase();
        List<User> list = new LinkedList<User>();
        Cursor c = db.rawQuery("select * from user", null);
        while (c.moveToNext()) {
            User u = new User();
            u.setUserId(c.getString(c.getColumnIndex("userId")));
            u.setNick(c.getString(c.getColumnIndex("nick")));
            u.setHeadIcon(c.getInt(c.getColumnIndex("img")));
            u.setChannelId(c.getString(c.getColumnIndex("channelId")));
            u.setGroup(c.getInt(c.getColumnIndex("_group")));
            list.add(u);
        }
        c.close();
        db.close();
        return list;
    }

個々のユーザー情報の削除
1
2
3
4
5
6
public void delUser(User u) {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL("delete from user where userId=?",
                new Object[] { u.getUserId() });
        db.close();
    }

すべてのユーザー情報を削除
1
2
3
4
5
public void delete() {
        SQLiteDatabase db = helper.getWritableDatabase();
        db.execSQL("delete from user");
        db.close();
    }

データベースの操作は、主に削除して変更します.SQLiteの他の操作は、チュートリアルを見てみましょう.
声明:eoe文章の著作権は作者に属して、法律の保護を受けて、転載する時必ずハイパーリンクの形式で以下の情報を添付してください
原文作者:imesong
原文住所:http://my.eoe.cn/imesong/archive/21830.html