• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Android數據存儲_SQLite數據庫存儲

    標簽: SQL  android

    Android數據存儲的方式有種,主要有三種。分別為:文件存儲SharedPreference存儲,以及數據庫存儲。

    這篇主要講SQLite數據庫存儲。

    1.基本描述

            Android自帶了一種輕量級數據庫SQLite。SQLite是一款輕量級的關系型數據庫,他的運算速度非常快,占用資源很少,通常只需要占用幾百K的資源就足夠了,因而特別適合在移動設備上使用。SQLite不僅支持標準SQL語法,還遵循了數據庫ACID事務。

            Android為了讓我們更加方便的使用管理數據庫,專門提供了一個SQLiteOpenHelper幫助類,借助這個幫助類會非常簡單的對數據庫進行創建和升級。下面我們就通過這幫助類來完成數據庫簡單的使用。

            文件存儲路徑 :data/data/包名/databases/**.db

    2.代碼

    2.1MyDatabaseHelper

    首先我們自己寫一個MyDatabaseHelper繼承SQLiteOpenHelper

    public class MyDatabaseHelper extends SQLiteOpenHelper {
        private Context mContext;
        public static final String CREATE_BOOK = "create table Book(" +
                "id integer primary key autoincrement," +
                "auther text," +
                "price real," +
                "pages integer," +
                "name text)";
    
        public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
            mContext = context;
        }
    
        public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version, @Nullable DatabaseErrorHandler errorHandler) {
            super(context, name, factory, version, errorHandler);
            mContext = context;
        }
    
        public MyDatabaseHelper(@Nullable Context context, @Nullable String name, int version, @NonNull SQLiteDatabase.OpenParams openParams) {
            super(context, name, version, openParams);
            mContext = context;
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_BOOK);
            Toast.makeText(mContext, "創建成功", Toast.LENGTH_SHORT).show();
    
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
    }

           通過代碼可以看出需要重寫onCreate()和onUpgrade()兩個方法。在onCreate()中創建數據庫,在onUpgrade()中升級數據庫。

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

            這個就是創建一個Book表,里面有幾個字段:id、auther、price、pages、name通過onCreate()中的db.execSQL(CREATE_BOOK);創建表。

    2.2創建數據庫和表

    1.當首次進入程序沒有創建數據庫和表的時候data/data/包名/沒有數據庫

            我們來創建book表:

    myDatabaseHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1);
    create.setOnClickListener(new View.OnClickListener() {
    
        @Override
        public void onClick(View v) {
            writableDatabase = myDatabaseHelper.getWritableDatabase();
        }
    });

    同ADM查看:

            確實多了BookStore.db數據庫文件,但是還不能確定有沒有創建book表,我們把他導出到電腦,使用SQLite Expert Professional 3.exe查看。同時還多了一個db-journal是為了讓數據庫文件能夠支持事務而產生的臨時日志文件,通常情況下這個文件的大小是0字節。

            可以清晰的看到了BookStore.db數據庫文件里面有兩個表,一個是android_metadata,這個是數據庫文件都會生成的,另一個Book表就是我們創建的了。

    2.3升級數據庫

            眼里好的同仁已經看到了MyDatabaseHelper中還重寫了onUpgrade()方法。但是沒有用到,這個就是升級表的。因為當咱們創建好一本表后再次點擊“創建”按鈕的時候確實沒有彈出“創建成功”,通過ADM查看也沒新的數據庫和表生成,這是因為當沒有這個數據庫的時候會調用onCreate()方法創建,當已經創建了就不能再創建了。

            那么怎么才能再次創建呢?這里只是演示,并不能真正在項目中使用

    public class MyDatabaseHelper extends SQLiteOpenHelper {
        private Context mContext;
        public static final String CREATE_BOOK = "create table Book(" +
                "id integer primary key autoincrement," +
                "auther text," +
                "price real," +
                "pages integer," +
                "name text)";
    
        public static final String CREATE_BOOK1 = "create table Book1(" +
                "id integer primary key autoincrement," +
                "auther text," +
                "price real," +
                "pages integer)";
    
        public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
            mContext = context;
        }
    
        public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version, @Nullable DatabaseErrorHandler errorHandler) {
            super(context, name, factory, version, errorHandler);
            mContext = context;
        }
    
        public MyDatabaseHelper(@Nullable Context context, @Nullable String name, int version, @NonNull SQLiteDatabase.OpenParams openParams) {
            super(context, name, version, openParams);
            mContext = context;
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_BOOK);
            db.execSQL(CREATE_BOOK1);
            Toast.makeText(mContext, "創建成功", Toast.LENGTH_SHORT).show();
    
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("drop table if exists Book");
            db.execSQL("drop table if exists Book1");
            onCreate(db);
        }
    }

    通過onUpgrade先把之前的刪除在重新創建,只是演示因為刪除數據也沒了。

    同時調用的時候將版本號升序。

    myDatabaseHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);

    這個時候發現已經多了一張表了Book1.

    2.4 插入數據:

    add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ContentValues contentValues = new ContentValues();
            contentValues.put("name", "鋼鐵是怎樣煉成的");
            contentValues.put("pages", 10);
            contentValues.put("price", 9.9);
            contentValues.put("auther", 9.9);
            contentValues.put("auther", "保爾");
            myDatabaseHelper.getWritableDatabase().insert("Book", null, contentValues);
            contentValues.clear();
            contentValues.put("name", "鋼鐵是這樣煉成的");
            contentValues.put("pages", 10);
            contentValues.put("price", 19.9);
            contentValues.put("auther", 9.9);
            contentValues.put("auther", "保爾兒");
            myDatabaseHelper.getWritableDatabase().insert("Book", null, contentValues);
        }
    });

    2.5 更新數據

    updata_data.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ContentValues contentValues = new ContentValues();
            contentValues.put("price", 100);
            myDatabaseHelper.getWritableDatabase().update("Book", contentValues, "name = ?", new String[]{"鋼鐵是這樣煉成的"});
        }
    });

    2.6 刪除數據

    del_data.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myDatabaseHelper.getWritableDatabase().delete("Book", "name = ?", new String[]{"鋼鐵是這樣煉成的"});
        }
    });

    2.7 查詢數據

    query_data.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Cursor book = myDatabaseHelper.getWritableDatabase().query("Book", null, null, null, null, null, null);
            if (book.moveToFirst()) {
                do {
                    String name = book.getString(book.getColumnIndex("name"));
                    int pages = book.getInt(book.getColumnIndex("pages"));
                    double price = book.getDouble(book.getColumnIndex("price"));
                    String auther = book.getString(book.getColumnIndex("auther"));
                    Log.d("TAG", "name:" + name +
                            "pages:" + pages +
                            "price:" + price +
                            "auther:" + auther
    
                    );
                } while (book.moveToNext());
            }
    
        }
    });

    SQLiteOpenHelper幫助類雖然已經做的很簡單了,但是用起來還是有些不方便,比如升級數據庫如果用在項目中就需要很復雜的邏輯了,這個時候就會發現一個LitePal一個開源庫了,具體再這里。

    轉發表明出處https://blog.csdn.net/qq_35698774/article/details/106698065

    點擊下載源碼

    android互助群:

    感謝:郭霖的《第一行代碼 第二版》

    版權聲明:本文為qq_35698774原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_35698774/article/details/106698065

    智能推薦

    【鼠】安卓學習雜記(十三)——Android數據存儲之SQLite數據庫存儲

    一、適用場景 適用于存儲一些復雜的關系型數據。 二、概述 輕量級嵌入式數據庫引擎,它支持SQL 語言,并且只利用很少的內存就有很好的性能。可存儲大量的數據。 Android SQLite對我目前的安卓學習水平而言,還是比較復雜的,在此處暫不做詳細闡述,僅以此時使用狀態闡述。 三、使用步驟 第一步:創建MyDatabaseHelper繼承SQLiteOpenHelper 第二步:在MainActiv...

    QML使用Sqlite數據庫存儲ListModel數據

    (本文為utf-8格式,可以直接使用相應代碼)    Models 是用來提供數據的,它既可以以 QML 的形式出現也可以是 C++的類。QML中的Model有ListModel、XmlListModel、 VisualItemModel;C++ 中的 Model 有 QAbstractItemModel、QStringList、 QList<QObject*>等。...

    SQlite數據庫存儲及增刪改查例子

    MainActivity: MyDatabaseHelper.class 運行截圖 例如查詢:...

    SQLite數據庫存儲(一)【安卓學習筆記】

    對于MODE_PRIVATE,MODE_APPEND兩種模式,對寫文件的影響有什么不同? MODE_PRIVATE:該文件只能被當前程序讀寫,會把原來的內容覆蓋掉 MODE_APPEND:該文件的內容可追加,不會把原來的內容覆蓋掉,新寫的內容追加在文件后面 但是對于修改文件中的部分內容,應該怎么做呢?這就需要我們用到SQLite數據庫 主要內容: 創建和打開一個SQLite 數據庫 SQLite數...

    17讀書筆記之SQLite數據庫存儲

    SQLite數據庫存儲 創建數據庫 Android管理數據庫提供了一個SQLiteOpenHelper幫助類。 借助這個類就可以簡單地對數據庫進行創建和升級。下面學習SQLiteOpenHelper的基本用法。 首先SQLiteOpenHelper是一個抽象類,我們要是用的話,需要創建一個自己的幫助類去繼承它。SQLiteOpenHelper中有兩個抽象方法。 onCreate()和onUpgra...

    猜你喜歡

    【Android】數據存儲-SQLite

    SQLite特點: 輕量級 獨立 隔離 跨平臺 多語言接口 安全性(多進程可以同時讀取,但同一時間只能有一個進程在寫入數據) 創建數據庫和表,以及數據庫的增刪改查操作 DatabaseHelper.java 創建一個activity: DatabaseButtonActivity.java xml: 使用Android Debug Database查看數據庫和表信息 參考鏈接:https://ju...

    Android存儲之SQLite數據庫

    Android存儲之SQLite數據庫數據庫 創建數據庫 操作數據庫 查看數據庫...

    數據庫存儲引擎

    MySQL整體架構 MySQL主要分為四層架構,分別是網絡連接層,服務層,存儲引擎層,物理層。 網絡連接層 主要負責連接管理,授權認證,安全等。每個客戶端連接都對應著服務器上的一個線程。服務器上維護一個線程池,避免為每個連接創建和銷毀線程。當客戶端連接到MySQL服務器時,服務器對其進行認證。可以通過用戶名與密碼認證,也可以通過SSL證書進行認證。登錄認證后,服務器還會驗證客戶端是否有執行某個查詢...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    精品国产乱码久久久久久蜜桃不卡