Android持久化技术之SQLite数据库存储(一)

12 篇文章 0 订阅

       SQLite数据库是android系统中内置的一款轻量级关系数据库,它的运行速度快,占用的系统资源少。支持标准的SQL语法,还遵循了数据库的ACID事务。前两篇文章说到了文件存储和SharedPreferences存储,它们用来存储简单的数据还是很方便的,但当要存储的数据变的很复杂时,用文件存储和SharedPreferences就很麻烦了,这个时候,我们就要用到SQLite数据库了。

       先来看看如何创建数据库吧,android为了让我们方便地管理数据库,提供了一个SQLiteOpenHelper帮助类,通过这个类我们就可以很简单的对数据库进行创建和升级。SQLiteOpenHelper类是一个抽象类,其中有两个抽象方法,分别是onCreate()和onUpgrade(),我们需要重写这两个方法,然后在这两个方法中实现创建和升级数据库的逻辑。SQLiteOpenHelper类中还有两个实例方法getReadableDatabase()和getWritableDatabase()用于创建数据库或打开一个现有的数据库,并返回一个可对数据进行读写操作的对象。下面举个例子:

activity_main.xml中的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/createDatabase"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Create Database"
        android:textAllCaps="false"/>

</LinearLayout>

创建MyDataHelper类继承SQLiteOpenHelper类,MyDataHelper类的代码如下:

package com.tangliang.sqlitedatabase;

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

/**
 * Created by tangliang on 2017-07-25.
 */

public class MyDatabaseHelper extends SQLiteOpenHelper {

    public static final String CREATE_STUDENT = "create table Student ("
            + "id integer primary key autoincrement, "
            + "name text, "
            + "age 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_STUDENT);
        Toast.makeText(mContext, "Creaet succeeded", Toast.LENGTH_SHORT).show();
    }

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

    }
}



MainActivity中的代码如下:

package com.tangliang.sqlitedatabase;

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

    private Button createDatabase;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myDatabaseHelper = new MyDatabaseHelper(this, "Student.db", null, 1);
        createDatabase = (Button) findViewById(R.id.createDatabase);
        createDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myDatabaseHelper.getWritableDatabase();
            }
        });
    }
}

运行程序,点击Create Database按钮,这是会显示Create succeeded。为了证Student数据库确实创建成功,我们可以使用adb进行查看。adb是android sdk内置的一个工具,先将它添加到环境变量中,再在命令行界面中依次输入adb shell --> cd /data/data/应用包名/databases/ -->sqlite3 Student.db --> .table 就可以看到我们创建的Student数据库以及Student表了。


更改数据库结构也比较简单,只需要对MyDatabaseHelper类做些许更改就可以了。例如添加一个Course表,更新后的MyDatabaseHelper类代码如下:

package com.tangliang.sqlitedatabase;

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

/**
 * Created by tangliang on 2017-07-25.
 */

public class MyDatabaseHelper extends SQLiteOpenHelper {

    public static final String CREATE_STUDENT = "create table Student ("
            + "id integer primary key autoincrement, "
            + "name text, "
            + "age integer)";

    public static final String CREATE_COURSE = "create table Course ("
            + "id integer primary key autoincrement, "
            + "courseName text, "
            + "courseCredit 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_STUDENT);
        db.execSQL(CREATE_COURSE);
        Toast.makeText(mContext, "Creaet succeeded", 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 Course");
        onCreate(db);
    }
}
 
按照前面讲的查看数据库结构的步骤就能看到Student数据库中现在多了Course表。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值