Android中sqlit資料庫公升級或者降級

2021-09-29 05:24:39 字數 1798 閱讀 4286

sqlite是android內建的乙個很小的關係型資料庫。sqliteopenhelper是乙個用來輔助管理資料庫建立和版本公升級問題的抽象類。我們可以繼承這個抽象類,實現它的一些方法來對資料庫進行自定義操作。下面兩個方法必須重寫:

onupgrade:呼叫時機是使用者在做應用更新,覆蓋安裝後啟動,如果新版本中資料庫版本號要比舊版本中的資料庫版本號高則會呼叫。這時可以在這個函式完成資料庫版本公升級帶來的舊版本的相容問題,以及資料遷移問題。

還有乙個一般情況下不需要重寫,但在應用出現逆向降級(如應用由版本號4降級安裝版本號為3的包)時必須重寫的方法ondowngrade,如果應用降級覆蓋安裝時沒有重寫該方法則會崩潰。

在資料庫版本公升級時, 我們可能會遇到這樣一些情況:

而處理上面這些問題都要在不損害舊資料庫歷史資料的前提下完成。這裡我們假設使用者手機上之前安裝的是資料庫版本為1的包,公升級安裝的是資料庫版本號為2的包。這時我們要在資料庫版本為2的包在去處理這些公升級邏輯。

首先是擴充套件乙個表的字段在onupgrade中的實現為:

@override

public

void

onupgrade

(sqlitedatabase db,

int oldversion,

int newversion)

}

sqlite對alter table的支援是有限的,你可以在乙個存在表上新增乙個欄位到末尾,或者是改變表的名稱。但如果你想做更複雜的操作,比如刪除乙個表已有的字段,就要重新建立這個表並完成資料遷移,而不能使用drop column這樣方便的命令了。

比如表pedant原來有三個欄位a、b、c,現在想刪除c欄位,那麼在onupgrade中寫法如下:

@override

public

void

onupgrade

(sqlitedatabase db,

int oldversion,

int newversion)

finally

}}

這樣就既完成了對c欄位的刪除也保留了原來表上的資料。

最後一種情況最簡單直接執行create語句就要可以了。

@override

public

void

onupgrade

(sqlitedatabase db,

int oldversion,

int newversion)

}

資料庫在做公升級時我們能明確地知道當前我們要對各舊表進行什麼樣的操作來相容新版本。但如果在資料庫降級時,情況就不一樣了,針對我們開發新版本2時, 我們不能明確地知道以後的新版本比如版本3、4的資料庫結構走向是怎樣的。比如以後使用者從版本3回退到我們正在開發的版本2,由於我們開發當時不能預知版本3的表結構,不知版本3的資料表能否相容到版本2(假如版本3公升級時刪除了乙個版本2一直在用的表字段,這時回退資料結構可能就不相容了),那麼我們在開發版本2時最穩妥的做法是重寫ondowngrade時把所有當前版本將用到的表全部重建,即降級時扔掉以前全部的資料。

// 因為我們無法預知未來版本的表結構,向下相容時最穩妥的方法就是將該版本自己需要的表重構一次

@override

public

void ondowngrade (sqlitedatabase db,

int oldversion,

int newversion)

Android資料儲存和訪問之SQLite儲存

sqlite資料庫簡介 acid 資料庫事物正確執行的4個基本要素 1 原子性2 一致性3 隔離性4 永續性 資料的常用操作主要有以下 1 建立資料庫 2 新增資料庫 public void adddata view view 3 刪除資料 public void deletedata view v...

android中使用adb檢視sqlite資料庫

1.進入到控制台中,輸入adb shell,進入到命令模式的環境中 2.輸入cd data data 轉換到專案資料夾 3.選擇的專案檔案,比如我的com.android.homework,輸入命令 cd com.android.homework 4.可以使用ls l 命令檢視當前目錄中的檔案 5....

sqlit3,資料庫讀取

sqlit3 emmm,輕量級,讀取資料庫是方便,但是寫入就比較麻煩了。沒事用來練習還是比較好用。import sqlite3 import numpy as np import pandas as pd import matplotlib.pyplot as plt import os impor...