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表。