SQLite ——建立資料庫與升級資料庫
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(),重新建表。