Sqlite简单使用

前言

Sqlite是Android自带的轻量级数据库,一个项目中多多少少都会有用到数据库地方像,下载、以及做一些埋点上传等,但是自己很少从头到尾去写过数据库。这里整理一个dome记录一下包括常用的(增、删、改、查和数据库升级)。

SQLiteOpenHelper

创建数据库的帮助类具体代码如下:

//创建数据库帮助类
public class CustomSQLiteOpenHelper extends SQLiteOpenHelper{
    //创建数据库名称
    private static final String DATABASE_NAME = "book_store.db";
    //创建版本号
    private static  final int DATABASE_VERSION= 1;//升级增加1

    /**
     *
     * 默认主键自增
     * 书名
     * 作者
     * 价格
     *
     */
    private static final  String CREATE_TABLE = "create table bookStore("
            +"id integer primary key autoincrement,"
            +"book_name text,"
            +"author text,"
            +"price real)";
    //多个参数方便在调用的时候自定义数据
    public CustomSQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    //创建数据库使用的默认构造方法
    public CustomSQLiteOpenHelper(Context context) {
        super(context, DATABASE_NAME, null,DATABASE_VERSION);
    }

    //创建数据库使用
    @Override
    public void onCreate(SQLiteDatabase db) {
        //执行创建数据库
        Log.e("TAG","执行创建数据库");
        db.execSQL(CREATE_TABLE);
        //升级数据库调用
    }
    //升级数据库使用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
    }
}

通过注释可以看到这里就是创建数据库、创建表、版本号:以及升级的对应操作。真正项目中建议创建一个单例模式这样全局只存在一个对象。表创建好后对应便是增删改查这里也比较简单:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button OpenButton;
    private Button SQLAdd;
    private Button SQLDelete;
    private Button SQLUpdate;
    private Button SQLSearch;
    private Button SQLSJ;
    private CustomSQLiteOpenHelper customSQLiteOpenHelper;
    private SQLiteDatabase writableDatabase;//对数据库具体操作(增删改查)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实现方式通过点击button去创建数据库
        Init();
        CreateTable();
    }

    private void Init() {
        SQLAdd = findViewById(R.id.add);
        SQLSearch = findViewById(R.id.search);
        OpenButton = findViewById(R.id.button);
        SQLUpdate = findViewById(R.id.updata);
        SQLDelete = findViewById(R.id.delete);
//        OpenButton = findViewById(R.id.button);
//        OpenButton = findViewById(R.id.button);

        OpenButton.setOnClickListener(this);
        SQLAdd.setOnClickListener(this);
        SQLSearch.setOnClickListener(this);
        SQLUpdate.setOnClickListener(this);
        SQLDelete.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button:
                CreateTable();
                break;
            case R.id.add:
                AddData();//增加数据库数据
                break;
            case R.id.search:
                SearchData();
                break;
            case R.id.updata:
                UpData();
                Toast.makeText(MainActivity.this,"查找数据库",Toast.LENGTH_SHORT).show();
                break;
            case R.id.delete:
                DeteteData();
                break;
        }
    }

    //创建数据库
    private void CreateTable() {
        customSQLiteOpenHelper = new CustomSQLiteOpenHelper(MainActivity.this);
        writableDatabase = customSQLiteOpenHelper.getWritableDatabase();//通过写入是方式来创建数据库
    }

    //增加数据  book_name   author   price
    private void AddData() {
        writableDatabase = customSQLiteOpenHelper.getWritableDatabase();//通过写入是方式来创建数据库
        ContentValues values = new ContentValues();
        values.put("book_name", "《大话西游》");
        values.put("author", "吴承恩");
        values.put("price", "88");
        writableDatabase.insert("bookStore", null, values);//增加数据库数据

    }

    //查找数据
    private void SearchData() {
        writableDatabase = customSQLiteOpenHelper.getWritableDatabase();//通过写入是方式来创建数据库
        Cursor cursor = writableDatabase.rawQuery("select * from bookStore", null);
        while (cursor.moveToNext()) {//去掉主键查询
            int id= cursor.getInt(0);
            String name = cursor.getString(1);
            String author = cursor.getString(2);
            double price = cursor.getInt(3);
            Log.e("TAG", id+"----"+name + "----" + author + "----" + price);
        }

    }

    //修改数据
    private void UpData() {
        //更新语法
        writableDatabase.execSQL("UPDATE bookStore SET book_name = '《海底两万里》' WHERE id = 2;");
    }
    //删除某一条数据
    private void DeteteData(){
        writableDatabase.delete("bookStore","id=5",null);
    }
}

这里比较简单基本上就只是执行对应的Sqlite语句。进行增删改查。

升级

数据库升级是会有很多种情况的:

如果只是对1.0版本的话直接通过在onCreate 中直接安装

但是用户安装APK的时候,可能是:从1.0升级到2.0也可能是直接就是安装2.0的此时考虑到:升级:通过onUpgrade方法
直接安装通过onCreate方法
如果现在有3.0的版本:此时有三种情况:

1.0-----3.0 onUpgrade方法
2.0-----3.0 onUpgrade方法
3.0 直接安装3.0 onCreate方法

1.0版本:

   @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL.CREATE_TABLE_FAVORITE);
         
        // 若不是第一个版本安装,直接执行数据库升级
        // 请不要修改FIRST_DATABASE_VERSION的值,其为第一个数据库版本大小
        final int FIRST_DATABASE_VERSION = 1000;
        onUpgrade(db, FIRST_DATABASE_VERSION, DATABASE_VERSION);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 使用for实现跨版本升级数据库
        for (int i = oldVersion; i < newVersion; i++) {
            switch (i) {
 
            default:
                break;
            }
        }
    }

所以当数据库有多个版本的时候就:

public class DBHelper extends SQLiteOpenHelper {
 
    private static final String DATABASE_NAME = "mall.db"; 
    private static final int DATABASE_VERSION = 1002;
 
    private static DBHelper instance = null;
 
 
    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
     
    public synchronized static DBHelper getInstance(Context context) {
        if (instance == null) {
            instance = new DBHelper(context);
        }
        return instance;
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQL.CREATE_TABLE_FAVORITE);
         
        // 若不是第一个版本安装,直接执行数据库升级
        // 请不要修改FIRST_DATABASE_VERSION的值,其为第一个数据库版本大小
        final int FIRST_DATABASE_VERSION = 1000;
        onUpgrade(db, FIRST_DATABASE_VERSION, DATABASE_VERSION);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 使用for实现跨版本升级数据库
        for (int i = oldVersion; i < newVersion; i++) {
            switch (i) {
            case 1000:
                upgradeToVersion1001(db);
                break;
            case 1001:
                upgradeToVersion1002(db);
                break;
                 
            default:
                break;
            }
        }
    }
     
    private void upgradeToVersion1001(SQLiteDatabase db){
        // favorite表新增1个字段
        String sql1 = "ALTER TABLE "+SQL.T_FAVORITE+" ADD COLUMN deleted VARCHAR";
        db.execSQL(sql1);
    }
    private void upgradeToVersion1002(SQLiteDatabase db){
        // favorite表新增2个字段,添加新字段只能一个字段一个字段加,sqlite有限制不予许一条语句加多个字段
        String sql1 = "ALTER TABLE "+SQL.T_FAVORITE+" ADD COLUMN message VARCHAR";
        String sql2 = "ALTER TABLE "+SQL.T_FAVORITE+" ADD COLUMN type VARCHAR";
        db.execSQL(sql1);
        db.execSQL(sql2);
    }
}

总结

这样的升级方式是考虑到线上存在多个版本的时候,兼容到多个版本的用户升级问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值