安卓SQLite




例子:以下用了自己的设计模式(Crime是我的数据对象)

1. 准备一个类来描述数据库对象及其项(非必要,设计模式)

public class CrimeDbSchema {

    public static final class CrimeTable{
        public static final String CrimeName = "crime";

        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";
        }
    }



}

2. 设计数据库类

public  class CrimeBaseHelper extends SQLiteOpenHelper{

    private static int VERSION = 1;
    private static String DATEBASE_NAME = "crimebase.db";


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


    //该方法当名字对应的数据库不存在时,会创建
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL("create table " + CrimeTable.CrimeName + "(" +
                " _id integer primary key autoincrement, " +
                CrimeTable.Cols.UUID + ", " +
                CrimeTable.Cols.TITLE + ", " +
                CrimeTable.Cols.DATE + ", " +
                CrimeTable.Cols.SOLVED + ")");

    }

    //该方法当数据库版本变迁时会升级(注意是版本)
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

3. 设计生成sql数据语句方法

    //转换为数据部分sql语句
    private static ContentValues getContentValues(Crime crime) {
        ContentValues values = new ContentValues();
        values.put(CrimeTable.Cols.UUID, crime.getyID().toString());
        values.put(CrimeTable.Cols.TITLE, crime.getyTitle());
        values.put(CrimeTable.Cols.DATE, crime.getyDate().getTime());
        values.put(CrimeTable.Cols.SOLVED, crime.getCrimeFlag() ? 1 : 0);
        return values;
    }
4. 实例化数据库对象(根据自己继承设计的数据库对象类)

private SQLiteDatabase mDatabase = new CrimeBaseHelper(mContext).getWritableDatabase();
5. 插入

        ContentValues values = getContentValues(c);//调用转换为数据部分sql语句
        mDatabase.insert(CrimeTable.CrimeName, null, values);
6. 更新

    //更新sql
    public void updateCrime(Crime crime) {
        String uuidString = crime.getyID().toString();
        ContentValues values = getContentValues(crime);//调用转换为数据部分sql语句
        mDatabase.update(CrimeTable.CrimeName, values,
                CrimeTable.Cols.UUID + " = ?",
                new String[] { uuidString });
    }
7. 继承设计查询类

public class CrimeCursorWrapper extends CursorWrapper {

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

    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));

        Crime crime = new Crime(UUID.fromString(uuidString));
        crime.setyTitle(title);
        crime.setyDate(new Date(date));
        crime.setCrimeFlag(isSolved != 0);

        return crime;
    }

}
8. 设计查询方法

    //查询crime记录,返回查询对象
    //可根据项的段和相应的字找到相应的项
//    private Cursor queryCrimes(String whereClause, String[] whereArgs) {
    private CrimeCursorWrapper queryCrimes(String whereClause, String[] whereArgs) {
        Cursor cursor = mDatabase.query(
                CrimeTable.CrimeName,
                null, // Columns - null selects all columns
                whereClause,
                whereArgs,
                null, // groupBy
                null, // having
                null // orderBy
        );
        return new CrimeCursorWrapper(cursor);
    }


}
9. 查询表的项遍历

        List<Crime> crimes = new ArrayList<>();
        CrimeCursorWrapper cursor = queryCrimes(null, null);//调用查询crime记录方法,返回查询对象
        try {
            cursor.moveToFirst();//指向表单第一个项
            while (!cursor.isAfterLast()) {//如果不为空
                crimes.add(cursor.getCrime());//将表单项数据添加到列表
                cursor.moveToNext();//项下移
            }
        } finally {
            cursor.close();//不用要关闭,不用动一个关一次,全部用好才关
        }
        return crimes;















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值