Android数据存储——SQLite数据库存储

Android系统内置数据库,SQLite是一款轻量级关系型数据库。

一、创建数据库

Android为了让我们能够更方便的管理数据库,专门提供了一个SQLiteOpenHelper帮助类,使用这个类就可以简单的对数据库进行创建和升级。

SQLiteOpenHelper是一个抽象类,我们需要创建一个自己的帮助类去继承它。SQLiteOpenHelper中有两个抽象对象,分别是onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后在这两个方法中去实现创建、升级数据库的逻辑。

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

SQLiteOpenHelper有两个构造方法重写,一般使用参数少一点的那个构造方法,接收4个参数,第一个参数是Context,第二个是数据库名,第三个参数允许我们在查询数据的时候返回一个自定义的Cursor,一般都是传入null,第四个数据表示当前数据库的版本号,可用于对数据库进行升级操作。

构建出SQLiteOpenHelper的实例后,在调用它的getReadableDatabase或getWritableDatabase方法就能够创建数据库了,此时重写的onCreate()方法也会得到执行,所以通常会在这里去处理一些创建表的逻辑。

 这里我们希望创建一个名为BookStore.db的数据库,然后再数据库中新建一张Book表,表中有id、作者、价格、页数、和书名等列

package com.wangkangli.sqlitelearn;

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

public class MyDatabaseHelper extends SQLiteOpenHelper {
    public static final String CREATE_BOOK = "create table book("
            +"id integer primary key autoincrement,"
            +"author text,"
            +"price real,"
            +"pages Integer,"
            +"name text)";
    public static final String CREAT_CATEGORY = "create table Category("
            +"id integer primary key autoincrement,"
            +"category_name text,"
            +"category_code integer)";

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_BOOK);
        db.execSQL(CREAT_CATEGORY);
        Toast.makeText(mContext,"Create Success",Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists Book");
        db.execSQL("drop table if exists Category");
        onCreate(db);
    }
}
package com.wangkangli.sqlitelearn;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private MyDatabaseHelper dbHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dbHelper = new MyDatabaseHelper(this,"BookStore",null,2);
        Button creatrDatabase = findViewById(R.id.create_database);
        creatrDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dbHelper.getWritableDatabase();
            }
        });
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值