安卓開發筆記(十二):SQLite數據庫儲存(上)


SQLite數據庫存儲(上)

 創建數據庫

Android專門提供了一個 SQLiteOpenHelper幫助類對數據庫進行創建和升級

SQLiteOpenHelper需要創建一個自己的幫助類去繼承它並且重寫它的兩個抽象方法,即 onCreate() 和 onUpgrade()

SQLiteOpenHelper 中有兩個重要的實例方法:getReadableDatabase() 和 getWritableDatabase(),第一個方法可以在磁盤空間已滿的時候,只讀數據,而第二種方法在空間已滿的時候,則會出現異常

創建一個名為 BookStore.db 的數據庫

在這個數據庫中新建一張 book表,表中有 id(主鍵)、作者、價格、頁數和書名等列

我們在我們的項目當中新建 MyDatabaseHelper類,並繼承自 SQLiteOpenHelper,后面則可以在我們的主活動當中啟用這段新建的代碼,這個類的代碼如下:

package com.example.lenovo.studyittwo;

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

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String CREATE_BOOK = "create table book("
            +"id integer primary key autoincrement,"
            +"author text,"
            +"price real,"
            +"pages integer,"
            +"name text)";

    private Context mContext;//至於為什么我們要使用下面這段代碼以及為什么要定義這個私有的變量,書上並沒有寫我也不知道

    /**
     * 構造方法
     * @param context
     * @param name 數據庫名
     * @param factory 允許我們在查詢數據的時候返回一個自定義的 Cursor,一般都是傳入 null
     * @param version 當前數據庫的版本號,可用於對數據庫進行升級操作
     */
    public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }

    /**
     * 創建數據庫
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
//SQLiteDatabase這個數據庫是本身就存在的,並不需要我們自己去寫,因為在前面的代碼當中我們已經進行了import操作
// 執行建表語句 db.execSQL(CREATE_BOOK); Toast.makeText(mContext,"創建數據庫功",Toast.LENGTH_LONG).show(); } /** * 升級數據庫 * @param db * @param oldVersion * @param newVersion */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }

下面是主活動的代碼。也十分容易理解,我們在一個按鈕的事件當中加入主活動與這個類相聯系的函數就可以了:

package com.example.lenovo.studyittwo;


import android.content.IntentFilter;
import android.content.SharedPreferences;
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 dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 構建MyDatabaseHelper對象,指定數據庫名為"BookStore.db、版本號為1
        dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);

        Button btn_create_database = (Button) findViewById(R.id.creat);
        btn_create_database.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 創建或打開一個現有的數據庫(已存在則打開,否則創建一個新的)雖然這很顯然,但是我們怎么創建或者打開自己所指定的數據庫呢?難道就只能夠打開我們剛剛創建的這一個數據庫嗎?
                dbHelper.getWritableDatabase();
            }
        });


    }}

下面是我們主界面的代碼,只需要創建一個按鈕就可以了:

<?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=".MainActivity">

   <Button
       android:id="@+id/creat"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Creat database"/>

</android.support.constraint.ConstraintLayout>

最后,我們只需要按住這個按鈕,界面上就會彈出“數據庫創建成功”的toast資陽區,再次點擊的時候就不會出現了,但我們可以使用另外的的方法來查看我們創建數據庫成功沒,打開cmd就可以很容易地查看了。

 二.往數據庫當中再添加新表的方法

假設我們往數據庫當中加入category這張表的話,代碼首先從我們剛剛創建的類里在添加一段創建表的代碼就可以了,同時在建表語句onCreate函數下添加建表語句

 db.execSQL(CREATE_CATEGORY);

最后我們在

 onUpgrade()方法內寫上:
  db.execSQL("drop table if exists Book"); db.execSQL("drop table if exists Category")
  onCreate(db);

這樣子就可以避免我們必須卸載我們的軟件才可以在點擊create database之后出現“新建數據庫成功”的Toast字樣。
代碼如下:
package com.example.lenovo.studyittwo;

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

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String CREATE_BOOK = "create table book("
            +"id integer primary key autoincrement,"
            +"author text,"
            +"price real,"
            +"pages integer,"
            +"name text)";

public static final String CREATE_CATEGORY="create table Category("
    +"id integer primary key autoincrement,"
    +"category_name text,"
    +"category_code integer)";



    private Context mContext;//至於為什么我們要使用下面這段代碼以及為什么要定義這個私有的變量,書上並沒有寫我也不知道

    /**
     * 構造方法
     * @param context
     * @param name 數據庫名
     * @param factory 允許我們在查詢數據的時候返回一個自定義的 Cursor,一般都是傳入 null
     * @param version 當前數據庫的版本號,可用於對數據庫進行升級操作
     */
    public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
        mContext = context;
    }

    /**
     * 創建數據庫
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        // 執行建表語句
        db.execSQL(CREATE_BOOK);
        db.execSQL(CREATE_CATEGORY);
        Toast.makeText(mContext,"創建數據庫功",Toast.LENGTH_LONG).show();
    }

    /**
     * 升級數據庫
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists Book");
        db.execSQL("drop table if exists Category");
        onCreate(db);
    }

}

在寫完這段代碼之后,由於我們使用了

onUpgrade()函數

因此我們在主活動當中對代碼進行一定的更改,將主活動當中的
dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
更改成:
dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);
確保后面的版本號為2才可以使用這個升級的函數,具體主活動的代碼如下:
package com.example.lenovo.studyittwo;


import android.content.IntentFilter;
import android.content.SharedPreferences;
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 dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 構建MyDatabaseHelper對象,指定數據庫名為"BookStore.db、版本號為1,版本號改為2之后則會直接
        dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);

        Button btn_create_database = (Button) findViewById(R.id.creat);
        btn_create_database.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 創建或打開一個現有的數據庫(已存在則打開,否則創建一個新的)
                dbHelper.getWritableDatabase();
            }
        });


    }}

最終就可以得到新表插入成功的結果了。





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM