Android数据存储全方案之SQLite数据库存储

SQLite数据库存储

在Android的学习过程中,我相信大家了解到Android系统是内置了数据库的,SQLite是一款轻量级关系型数据库,它的运算速度非常快,占用的资源也非常的少,因而特别适合在移动设备上使用。Android将SQLite数据库内置到系统底层当中,使得Android中的持久化技术有了一个质的飞跃。

创建数据库

SQLiteOpenHelper是Android为了让我们能够更加方便地管理数据库专门提供的一个帮助类,借助这个类我们能够非常简单地对数据库进行创建和升级

首先,我们需要知道SQLiteOpenHelper累是一个抽象类,这意味着我们需要自己创建一个类去继承他,其中还有两个抽象方法onCreate()onUpgrade() ,我们必须在自己创建的类中去重写这两个方法,然后去实现数据库的创建、升级逻辑。

其中SQLiteOpenHelper中还有两个非常重要的实例方法:getReadableDatabase()和getWritableDatabase(),这两个方法都可以创建或者是打开一个现有的数据库(如果数据库已经存在则直接打开,否则直接创建一个新的数据库),并返回一个可以对数据库进行读写操作的对象。不同的是,当数据库不可写入的时候,getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则是抛出异常。

数据库文件会存放在 /data/data/ <package name> /databases/ 目录中

简单的使用帮助类创建SQLite数据库

package com.eendtech.www.mysqlite.DAO;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;

/**
 * SQLite数据库帮助类
 * Created by Seale on 2018/12/25.
 */

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String TAG = "MyDatabaseHelper";
    private Context context ;
    private String sqlString =
            "CREATE TABLE STUDENT(id integer primary key autoincrement," +
                    "name text," +
                    "sex char(2)," +
                    "age integer" +
                    ")"
            ;

    public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, null, version);
        this.context = context ;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(sqlString);
        Log.d(TAG, "onCreate: 创建数据库成功");
        Toast.makeText(context,"创建数据库成功",Toast.LENGTH_SHORT).show();

    }

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

    }
}
public class MainActivity extends AppCompatActivity {
    private MyDatabaseHelper databaseHelper ;
    private Button btn_create ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    private void initView (final int version){
        btn_create = findViewById(R.id.btn_create);
        btn_create.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                databaseHelper = new MyDatabaseHelper(getApplicationContext(),"Student.db",null,version);
                databaseHelper.getWritableDatabase();
            }
        });
    }
}

升级数据库

我们可以在onUpgrade()方法中进行升级数据库的操作。
我们可以看如下例子

package com.eendtech.www.mysqlite.DAO;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;

/**
 * SQLite数据库帮助类
 * Created by Seale on 2018/12/25.
 */

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String TAG = "MyDatabaseHelper";
    private Context context ;
    private String sqlString =
            "CREATE TABLE STUDENT(id integer primary key autoincrement," +
                    "name text," +
                    "sex char(2)," +
                    "age integer" +
                    ")"
            ;
    private String sql =
            "CREATE TABLE TEACHER(id integer primary key autoincrement," +
                    "name text," +
                    "sex char(2)," +
                    "age integer)"
            ;

    public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, null, version);
        this.context = context ;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(sqlString);
        db.execSQL(sql);
        Log.d(TAG, "onCreate: 创建数据库成功");
        Toast.makeText(context,"创建数据库成功",Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS STUDENT");
        db.execSQL("DROP TABLE IF EXISTS TEACHER");
        onCreate(db);
    }
}

本文版权归属:极束の梦想

转载文章时,请保留本文的版权内容。

作者:Seale

同时也欢迎各位大大交换友链。


本作品采用知识共享署名 4.0 国际许可协议进行许可。

如果可以的话,请给我钱请给我点赞赏,小小心意即可!

Last modification:April 12th, 2019 at 10:36 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment