android_sqlite数据库从基础到SDK封装

本篇从数据库的基本使用开始,然后利用反射+泛型对数据库操作进行优化,批量插入操作使用事务提高效率,采用链式调用方式优化查询操作。
最后是封装一个高可用,易替换,不受框架影响的数据库操作SDK。

一、SQLite基本使用

1.1 数据库及表的创建

    public class DbHelper extends SQLiteOpenHelper {
   
        private static final int VERSION = 1;
        private static final String DB_NAME = "person.db";

        public static final String  TABLE_NAME = "person";
        private static final String CREATE_TABLE_SQL = "CREATE TABLE IF NOT EXISTS "
                + TABLE_NAME +
                " (id integer primary key autoincrement, name text, age integer);";

        public DbHelper(Context context) {
            super(context, DB_NAME, null, VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_TABLE_SQL);
        }

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

1.2 数据库操作的实现(增、删、改、查)

    public class DbManager {

        private static DbManager sDbManager;
        private DbHelper mDbHelper;
        private DbManager(Context context) {
            mDbHelper = new DbHelper(context);
        }

        public static DbManager getInstance(Context context) {
            if (sDbManager == null) {
                synchronized (DbManager.class) {
                    if (sDbManager == null) {
                        sDbManager = new DbManager(context);
                    }
                }
            }
            return sDbManager;
        }


        public long insert(Person person) {
            ContentValues values = contentValuesByObj(person);
            SQLiteDatabase database = mDbHelper.getWritableDatabase();
            return database.insert(DbHelper.TABLE_NAME, null, values);
        }

        public int delete(String whereClause, String...whereArgs) {
            SQLiteDatabase database = mDbHelper.getWritableDatabase();
            return database.delete(DbHelper.TABLE_NAME, whereClause, whereArgs);
        }

        public int update(Person person, String whereClause, String... whereArgs) {
            SQLiteDatabase database = mDbHelper.getWritableDatabase();
            ContentValues values = contentValuesByObj(person);
            return database.update(DbHelper.TABLE_NAME, values, whereClause, whereArgs);
        }

        public List<Person> queryAll() {
            return query(null, null, null, null, null, null, null);
        }

        public List<Person> query(String[] columns,
                          String selection, String[] selectionArgs, String groupBy,
                          String having, String orderBy, String limit) {
            SQLiteDatabase database = mDbHelper.getWritableDatabase();

            Cursor cursor = database.query(DbHelper.TABLE_NAME, columns,
                    selection, selectionArgs, groupBy, having, orderBy, limit);

            if (cursor != null && cursor.moveToFirst()) {
                List<Person> persons = new ArrayList<>();
                do {
                    int idColumnIndex = cursor.getColumnIndex("id");
                    int nameColumnIndex = cursor.getColumnIndex("name");
                    int ageColumnIndex = cursor.getColumnIndex("age");
                    int id = cursor.getInt(idColumnIndex);
                    String name = cursor.getString(nameColumnIndex);
                    int age = cursor.getInt(ageColumnIndex);
                    Person person = new Person(id, name, age);
                    persons.add(person);
                } while (cursor.moveToNext());
                return persons;
            }
            return null;
        }

        private ContentValues contentValuesByObj(Person person) {
            ContentValues values = new ContentValues();
            if (person.getId() != 0) {
                values.put("id", person.getId());
            }
            values.put("name", person.getName());
            values.put("age", person.getAge());

            return values;
        }
    }

1.3 测试

    public class MainActivity extends AppCompatActivity {
   

        @ViewById(R.id.tv)
        private TextView mTv;
        @ViewById(R.id.input_et)
        private EditText mInputEt;
        private DbManager mDbManager;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            ViewUtils.inject(this);
            mDbManager = DbManager.getInstance(this);
        }

        @OnClick(R.id.btn)
        private void click() {
            Toast.makeText(MainActivity.this, mTv.getText().toString(), Toast.LENGTH_SHORT).s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值