Android内置了SQLite数据库,提供了SQLiteOpenHelper帮助类管理数据库,SQLiteOpenHelper中有两个抽象方法,分别是onCreate()和onUpgrade(),必须在自己的帮助类中重写这两个方法,然后分别在这两个方法中创建、升级数据库的逻辑。
SQLiteOpenHelper中两个非常重要的实例方法: getReadableDatabase() 和 getWritableDatabase() ,这两个方法都可以创建或打开一个数据库(如果不存在则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。当数据库不可写入(磁盘空间已满),getReadableDatabase()方法返回的对象将以只读方法打开数据库,而getWritableDatabase()方法将出现异常。
SQLiteOpenHelper有两个构造方法,一般用参数少的那个就可以
方法:
构建SQLiteOpenHelper实例,调用getReadableDatabase()或getWritableDatabase()就可以创建数据库
public class MyDatabaseHelper extends SQLiteOpenHelper {
private Context mContext;
public static final String CREATE_BOOK = "create table Book ( id integer primary key autoincrement, author text, price real, pages integer, name text )";
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);
Toast.makeText(mContext,"Create succeeded", Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldvVersion ,int newVersion){
}
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.snowair.databasepractice.MainActivity">
<Button
android:id="@+id/create_database"
android:text="建立数据库"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.constraint.ConstraintLayout>
package com.example.snowair.databasepractice;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
MyDatabaseHelper myDatabaseHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button createDatabase = findViewById(R.id.create_database);
myDatabaseHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
createDatabase.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
myDatabaseHelper.getReadableDatabase();
}
});
}
}
sql语句:
create table Book(
id integer primary key auto increment,
author text,
price real,
pages integer,
name text)
数据库的升级
想要在已经存在的数据库中添加表,在onCreate()里之间添加创建表没有用处,因为数据库已经存在,是不会再调用onCreate()函数,这时需要onUpgrade想要升级数据库,比如要在原有数据库的基础之上增加一个表,如果数据库已经存在,在onCreate()里再添加创建表没有用处,因为数据库已经存在,是不会再调用onCreate()函数,这时需要onUpgrade()
@Override
public void onUpgrade(SQLiteDatabase db, int oldvVersion ,int newVersion){
db.execSQL("drop table if exists Book");
db.execSQL("drop table if exists Category");
onCreate(db);
}
在onUpgrade()中将表删除掉,再调用onCreate(),重新建表。