Android编程权威指南(第14章 SQLite)

14.1

创建定义schema的java类,将其命名为CrimeDBSchema。新建时包名为database.CrimeDbSchema

在这里插入图片描述

2.定义CrimeTable内部类CrimeDBSchema.java)

 public static final class CrimeTable {
        public static final String NAME = "crimes";
        }

在这里插入图片描述

3.定义数据表字段(CrimeDBSchema.java)

 public static final class Cols {
            public static final String UUID = "uuid";
            public static final String TITLE = "title";
            public static final String DATE = "date";
            public static final String SOLVED = "solved";
        }

在这里插入图片描述

14.2

1.在数据库包中新建类,命名为CrimeBaseHelper.java,在类中添加

 private static final int VERSION = 1;
    private static final String DATABASE_NAME = "crimeBase.db";

    public CrimeBaseHelper(Context context) {
        super(context, DATABASE_NAME, null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
     }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

在这里插入图片描述
2.打开SQLiteDatebase(CrimeLab.java)

private Context mContext;
    private SQLiteDatabase mDatabase;
mContext = context.getApplicationContext();
        mDatabase = new CrimeBaseHelper(mContext)
                .getWritableDatabase();

在这里插入图片描述
3.编写SQL创建初始代码(CrimeBaseHelper.java)

 db.execSQL("create table " + CrimeDbSchema.CrimeTable.NAME);

在这里插入图片描述
4.创建Crime数据表(CrimeBaseHelper.java)

NAME+ "(" +
                        " _id integer primary key autoincrement, " +
                        CrimeTable.Cols.UUID + ", " +
                        CrimeTable.Cols.TITLE + ", " +
                        CrimeTable.Cols.DATE + ", " +
                        CrimeTable.Cols.SOLVED +
                        ")"

在这里插入图片描述

14.3

1.删除mCrimes相关代码(CrimeLab.java)
删掉横线标识处
在方框处加上下面的代码

  return new ArrayList<>();

在这里插入图片描述

14.4

14.4.1

1.创建ContenVlaues(CrimeLab.java)

 private static ContentValues getContentValues(Crime crime) {
        ContentValues values = new ContentValues();
        values.put(UUID, crime.getId().toString());
        values.put(TITLE, crime.getTitle());
        values.put(DATE, crime.getDate().getTime());
        values.put(SOLVED, crime.isSolved() ? 1 : 0);
        return values;
    }

在这里插入图片描述

14.4.2

1.插入记录(CrimeLab.java)

  ContentValues values = getContentValues(c);
        mDatabase.insert(CrimeTable.NAME, null, values);

在这里插入图片描述
2.更新记录(CrimeLab.java)

 public void updateCrime(Crime crime) {
        String uuidString = crime.getId().toString();
        ContentValues values = getContentValues(crime);
        mDatabase.update(CrimeTable.NAME, values,
                CrimeTable.Cols.UUID + " = ?",
                new String[]{uuidString});
    }

在这里插入图片描述

3.Crime数据刷新(CrimeFragment.java)

@Override
    public void onPause() {
        super.onPause();

        CrimeLab.get(getActivity())
                .updateCrime(mCrime);
    }

在这里插入图片描述

14.5

1.查询Crime记录(CrimeLab.java)

 private CrimeCursorWrapper queryCrimes(String whereClause, String[] whereArgs) {
        Cursor cursor = mDatabase.query(
                CrimeTable.NAME,
                null, // Columns - null selects all columns
                whereClause,
                whereArgs,
                null, // groupBy
                null, // having
                null  // orderBy
        );
        return new CrimeCursorWrapper(cursor);
    }

在这里插入图片描述

14.5.1

1.在数据库包中新建CrimeCursorWrapper类
(CrimeCursorWrapper.java)

extends CursorWrapper
public CrimeCursorWrapper(Cursor cursor) {
        super(cursor);
    }

在这里插入图片描述

2.新增getCrime()方法(CrimeCursorWrapper.java)

 public Crime getCrime() {
        String uuidString = getString(getColumnIndex(CrimeTable.Cols.UUID));
        String title = getString(getColumnIndex(CrimeTable.Cols.TITLE));
        long date = getLong(getColumnIndex(CrimeTable.Cols.DATE));
        int isSolved = getInt(getColumnIndex(CrimeTable.Cols.SOLVED));
return  null;
}

在这里插入图片描述
3.新增Crime构造方法(Crime.java)
删掉横线处代码,在方框处添加下列代码

this(UUID.randomUUID());
 public Crime(UUID id) {
        mId = id;
        mDate = new Date();
    }

在这里插入图片描述

4.完成getCrime()方法(CrimeCursorWrapper.java)
删掉红线处,在红框中添加


Crime crime = new Crime(UUID.fromString(uuidString));
        crime.setTitle(title);
        crime.setDate(new Date(date));
        crime.setSolved(isSolved != 0);
        return crime;

在这里插入图片描述

14.5.2

1.使用Cursor封装方法(CrimeLab.java)
找到红框位置,将原来的代码用下面代码替换,

 private CrimeCursorWrapper queryCrimes(String whereClause, String[] whereArgs)
return new CrimeCursorWrapper(cursor);

在这里插入图片描述

2.返回Crime列表(CrimeLab.java)
删掉return new ArrayList<>();,添加如下代码

public List<Crime> getCrimes() {
      
        List<Crime> crimes = new ArrayList<>();
        CrimeCursorWrapper cursor = queryCrimes(null, null);
        try {
            cursor.moveToFirst();
            while (!cursor.isAfterLast()) {
                crimes.add(cursor.getCrime());
                cursor.moveToNext();
            }
        } finally {
            cursor.close();
        }
        return crimes;
    }

在这里插入图片描述

重写getCrime(UUID)方法(CrimeLab.java)
删掉

return null;

添上

  CrimeCursorWrapper cursor = queryCrimes(
                CrimeTable.Cols.UUID + " = ?",
                new String[]{id.toString()}
        );
        try {
            if (cursor.getCount() == 0) {
                return null;
            }
            cursor.moveToFirst();
            return cursor.getCrime();
        } finally {
            cursor.close();
        }

在这里插入图片描述

4.添加setCrimes(List)方法(CrimeListFragment.java)

 public void setCrimes(List<Crime> crimes) {
            mCrimes = crimes;
        }

在这里插入图片描述

5.调用setCrimes(List)方法(CrimeListFragment.java)

 mAdapter.setCrimes(crimes);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值