1. 程式人生 > >SQLite ——建立資料庫與升級資料庫

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(),重新建表。