1. 程式人生 > >Android資料持久化—SQLite資料庫-建立資料庫(一)

Android資料持久化—SQLite資料庫-建立資料庫(一)

       在編寫軟體的過程中,我們通常會在移動裝置的本地儲存一些資料,這些資料如何儲存,就是使用到一個android 端的輕量級資料庫SQLite,在資料儲存大家都應該使用過SharedPreferences,這個東西只適合儲存一些簡單的資料,但是到了複雜的關係型資料的時候,上面這種方式就很難應付,所以就要使用sqlite資料庫。

       SQLite,是一款輕型的資料庫,是遵守ACID的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域專案。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體就夠了。它能夠支援Windows/Linux/Unix等等主流的作業系統,同時能夠跟很多程式語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC介面,同樣比起Mysql、PostgreSQL這兩款開源的世界著名資料庫管理系統來講,它的處理速度比他們都快。SQLite第一個Alpha版本誕生於2000年5月。 至2015年已經有15個年頭,SQLite也迎來了一個版本 SQLite 3已經發布。

     首先我們要知道Android為我們提供了一個非常棒的幫助了他是:SQLiteOpenHelper類,這個類是一個抽象類,他包含兩個我們要重寫的方法:onCreate(建立資料庫)和OnUpgrade(更新資料庫),需要在這兩個方法進行建立資料庫和升級資料庫,SQLiteOpenHelper包含兩個重要的例項方法:getWritableDatabase()和getReadableDatabase()這兩個方法都可以建立和開啟資料庫,返回一個操作資料庫的物件,牛逼吧前言介紹完了,開始寫程式碼吧:!!!!!

      建立一個繼承SQLiteOpenHelper的SQLiteDataBase類

public class SqliteData extends SQLiteOpenHelper {
    
    private Context mContext;

    public SqliteData(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

大家可以看到,我建立了一個繼承SQLiteOpenHelper的類,實現了我上面提到的那兩個抽象方法,並加了一個構造方法。

構造方法引數:第一個引數:上下文,第二個引數:資料庫名,第三個引數:允許查詢資料返回一個cursor,第四個引數:資料庫版本號

現在開始嘗試下建立資料庫:大家都應該知道sql語句吧,不知道的話點選這裡瞭解下。

我先寫一個sql語句的變數:

 public static final String CREATE_BOOK = "create table Book("
            + "id integer primary key autoincrement,"
            + "name text,"
            + "price real,"
            + "author text)";

這個sql語句的意思是:建立一個Book的表,裡面的欄位是id(設定為主鍵自增),name,price,author。

@Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_BOOK);
    }

 這個看名字就知道是建立資料庫,這裡直接是用 SQLIteDatabase的物件來執行我們寫好的sql語句,就可以建立資料庫了,

MainActivity.java核心程式碼

sqliteData = new SqliteData(MainActivity.this, "BookStore.db", null, 1);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sqliteData.getWritableDatabase();
            }
        });

上面著寫是核心程式碼,我把全部的程式碼放在下面:

SqliteData.java

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

    /**
     * Created by dark on 2018/7/17.
     */

    public class SqliteData extends SQLiteOpenHelper {

        public static final String CREATE_BOOK = "create table Book("
                + "id integer primary key autoincrement,"
                + "name text,"
                + "price real,"
                + "author text)";
        private Context mContext;

        public SqliteData(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
        }

        @Override
        public void onCreate(SQLiteDatabase sqLiteDatabase) {
            sqLiteDatabase.execSQL(CREATE_BOOK);
        }

        @Override
        public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

        }
}

MainActivity.java

import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private Button mButton,mAdd;
    private SqliteData sqliteData;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton = (Button) findViewById(R.id.btn);
        mAdd = (Button) findViewById(R.id.add);
        sqliteData = new SqliteData(MainActivity.this, "BookStore.db", null, 1);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sqliteData.getWritableDatabase();
            }
        });
    }
}

PS:如何檢視資料庫資料:我是用的是MAC系統,檢視資料庫教程僅供參考,不能作為實際檢視資料庫

我使用的ls命令。在windows系統中換成dir命令

開啟終端進入sdk資料夾,開啟platform-tools資料夾,裡面會有一個adb檔案,這裡如果你閒每次都需要這樣開啟這個工具麻煩,那可以設定系統變數(設定系統變數我就不寫了);

1找到這個adb檔案執行這個檔案./adb shell 2進入data資料夾執行兩次 cd data 3在最後一次進入的data資料夾內,找到你自己的專案資料夾,其實就是你專案的包名 0執行sqlite3 你自己的資料庫名,這裡千萬不要看圖片上的,圖片上的命令不知道怎麼回事是錯誤的,必須是sqlite3 你自己的資料庫名 開啟資料庫執行.table查看錶名 看,這樣剛剛我自己建立的資料庫表名就查到了