SQLite數據庫存儲
標簽: Android
引言
文件存儲和SharePreference存儲只適合存儲一些簡單的數據和鍵值對,當需要存儲大量復雜的關系型數據的時候,就需要用到SQLite數據庫。
函數與相關類介紹
SQLiteOpenHelper
SQLiteOpenHelper是一個抽象類,里面含有兩個抽象方法onCreate
和onUpgrade
,他們實現數據庫的創建和升級!
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)
查看創建的數據庫表
首先配置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數據庫的增刪改查!
依賴教材代碼,從中找出漏洞,提高自己的思維!
歡迎加入程序員技術交流群一起成長!
智能推薦
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)  ...
數據庫存儲引擎
MySQL整體架構 MySQL主要分為四層架構,分別是網絡連接層,服務層,存儲引擎層,物理層。 網絡連接層 主要負責連接管理,授權認證,安全等。每個客戶端連接都對應著服務器上的一個線程。服務器上維護一個線程池,避免為每個連接創建和銷毀線程。當客戶端連接到MySQL服務器時,服務器對其進行認證。可以通過用戶名與密碼認證,也可以通過SSL證書進行認證。登錄認證后,服務器還會驗證客戶端是否有執行某個查詢...