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

    標簽: Android

    引言

             文件存儲和SharePreference存儲只適合存儲一些簡單的數據和鍵值對,當需要存儲大量復雜的關系型數據的時候,就需要用到SQLite數據庫。

    函數與相關類介紹

    SQLiteOpenHelper

             SQLiteOpenHelper是一個抽象類,里面含有兩個抽象方法onCreateonUpgrade,他們實現數據庫的創建和升級!
             getReadableDatabase()getWritableDatabase()都可以創建或打開一個現有的數據庫(當數據庫不存在時他們就會創建一個數據庫),并返回一個可對數據庫進行讀寫的對象,而他們唯一的區別就在于,當磁盤空間滿時,及不可以寫入,那么getReadableDatabase()返回的是一個只讀對象,而getWritableDatabase()會出現異常

    創建數據庫

    編寫建表語句

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

    創建MyDatabaseHelper.java

    package com.example.sqlite;
    
    import android.content.Context;
    import android.database.DatabaseErrorHandler;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.widget.Toast;
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    
    public class MyDatabaseHelper extends SQLiteOpenHelper {
        public static final String CREATE_BOOK="create table Book( _id integer primary key autoincrement,sname text,snumber text)";
    
        private Context mContext;
        public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable 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 oldVersion, int newVersion) {
    
        }
    }
    
    

    編輯視圖

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context=".MainActivity">
        <Button
          android:id="@+id/create_database"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="Create database"
          tools:ignore="MissingConstraints"/>
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    編寫主活動

    package com.example.sqlite;
    
    import android.view.View;
    import android.widget.Button;
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    
    public class MainActivity extends AppCompatActivity {
        private MyDatabaseHelper dbHelper;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button createDatabase=(Button)findViewById(R.id.create_database);
            dbHelper=new MyDatabaseHelper(this,"BookStore.db",null,1);
            createDatabase.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dbHelper.getWritableDatabase();
                }
            });
        }
    }
    
    

    運行

    出現以下錯誤:

    我是未實例化

    dbHelper=new MyDatabaseHelper(this,“BookStore.db”,null,1);

    
    ```java
        java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase com.example.sqlite.MyDatabaseHelper.getWritableDatabase()' on a null object reference
            at com.example.sqlite.MainActivity$1.onClick(MainActivity.java:18)
    

    參考鏈接:
    1
    2
    3

    查看創建的數據庫表

    首先配置ADB
    然后再CMD操作
    在這里插入圖片描述

    如何向數據庫中插入表

             通過以上部分我們知道了,如何創建數據庫,并向其中創建一個表!那么我們再次向數據庫中加入表時,又將會如何呢?

    創建表

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

    加入我們直接修改成以下代碼,那么會成功嗎

     @Override
        public void onCreate(SQLiteDatabase db) {
             db.execSQL(CREATE_BOOK);
             db.execSQL(CREATE_CATEGORY);
            Toast.makeText(mContext,"Create succeeded",Toast.LENGTH_SHORT).show();
        }
    

    我們重新運行程
    將不會有提示產生,并且查看adb,依舊沒有新表。
    在這里插入圖片描述
    原因,因為數據庫已經存在,所以程序將不會運行onCreate()函數。

    解決方法

    在onUpgrade()方法中進行操作
     @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);
    
        }
    

    并且修改MainActivety.java

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

    運行結果

    在這里插入圖片描述
    建表成功

    總結

             已經了解到如何創建數據庫,并且添加新表,對數據庫進行升級更新!在下一篇我們將繼續了解SQLite數據庫的增刪改查!

    依賴教材代碼,從中找出漏洞,提高自己的思維!

    歡迎加入程序員技術交流群一起成長!

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

    智能推薦

    Android中的SQLite數據庫存儲

      SQLlite是一款輕量級的關系型數據庫, 作為Android系統內置的數據庫, 它的運算數度非常快,占用資源少,通常只需幾百KB的內存就足夠,SQLite不像其他關系型數據庫擁有眾多繁雜的數據類型,它的數據類型很簡單,integer 表示整型, real表示浮點型, text表示文本類型, bolb表示二進制型。  此處出示一個SQLite數據庫存儲的案例: SQLite...

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

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

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

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

    使用Android studio實現SQLite數據庫存儲

    使用Android studio實現SQLite數據庫存儲 題目 代碼 XML代碼(1) XML代碼(2) JAVA代碼(1) JAVA代碼(2) JAVA代碼(3) 運行結果 題目 1.要求按圖1完成設計,此界面為啟動界面。其中Spinner中的數據為:語文,數學,英語,歷史,生物。Spinner使用適配器綁定數據。 2.當點擊“添加成績”按鈕時,先判斷SQLite中是否...

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

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

    猜你喜歡

    第一行代碼之SQLite數據庫存儲

    SQLite數據庫存儲 6.3.1 創建數據庫 Android專門提供了一個 SQLiteOpenHelper幫助類對數據庫進行創建和升級 SQLiteOpenHelper需要創建一個自己的幫助類去繼承它并且重寫它的兩個抽象方法,即 onCreate() 和 onUpgrade() SQLiteOpenHelper 中有兩個重要的實例方法:getReadableDatabase() 和 getWr...

    《第一行代碼》 6.4 SQLite數據庫存儲

        特點:適用于存儲大量復雜的數據。 6.4.1 創建數據庫 1. SQLiteOpenHelper幫助類(抽象類),助于數據庫的創建和升級 (1)兩個構造方法供選,一般選參數少的那個:          SQLiteOpenHelper(參數1,參數2,參數3,參數4)        ...

    安卓持久化技術2—SQLite數據庫存儲_實現登錄注冊功能

    SQLite數據庫存儲_實現登錄注冊功能 注冊活動代碼 登錄活動代碼 SQLiteOpenHelper幫助類...

    數據庫存儲引擎

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

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

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

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