(一)概述
學習完上一節,關於android中的sqlite的基本操作,你就已經掌握了,而在本節我們將會學習 一些稍微高階一點的東西,資料庫事務,怎麼將大二進位制資料儲存到資料庫中,以及版本公升級時 資料庫如何處理!
(二)又見sqlite資料庫
1.sqlite事務
簡單點說就是:寫在事務裡的所有資料庫操作都成功,事務提交,否則,事務回滾,就是回到前面 的狀態——未執行資料庫操作的時候!另外,前面我們也將了,在data/data/《包名》/database/目錄 下除了有我們建立的db檔案外,還有乙個***.db-journal這個檔案就是用來讓資料庫支援事務而 產生的 臨時的日誌檔案!
2.sqlite儲存大二進位制檔案
3.******cursoradapter繫結資料庫資料
當然,這個玩玩可以,還是不建議使用,儘管用起來很簡單! 其實在講contentprovider我們就使用過這個東西來繫結聯絡人列表!這裡就不寫例項了, 直接上核心**!需要的自己搗鼓搗鼓就好了,另外,現在我們一般很少自己寫資料庫的東西 ,一般是通過第三方的框架:ormlite,greendao等,在高階部分,我們會再來學習~
4.資料庫公升級的一些集錦
2)一些疑問以及相關解決方案
①應用公升級,資料庫檔案是否會刪除?
答:不會!資料什麼的都在!
②如果我想刪除表中某個字段或者增加乙個新的字段,原先的資料還在嗎?
答:在的!
③你剛說的那種粗暴的更新資料庫版本的方式,不保留資料的,可以貼下嗎?
答:可以,這裡用的是第三方的ormlite,你也可以自己寫資料庫建立以及刪除的**:
④比如是這種,假如我們已經公升級到第三個版本了,我們在第二個版本增加了乙個表, 然後第三個版本也增加了乙個表,加入使用者直接從第乙個版本公升級到第三個版本,這樣 沒經過第二個版本,就沒有增加的那個表,這可怎麼破?
答:很簡單,我們可以在onupgrade()裡寫乙個switch(),結構如下:
public
void
onupgrade(sqlitedatabase db, connectionsource connectionsource,
int arg2, int arg3)
}
細心的你可能發現這裡並沒有寫break,這就對了,這是為了保證跨版本公升級時,每次資料庫 修改都能全部執行到!這樣可以保證表結構都是最新的!另外不一定是建表語句,修改表結構 也可以哦!
⑤舊表的設計太糟糕,很多欄位要改,改動太多,想建乙個新錶,但是表名要一樣 而且以前的一些資料要儲存到新錶中!
答:呵呵,給你跪了,當然,也有解決辦法,下面說下思路:
1.將舊表改名成臨時表: alter table user rename to _temp_user;
2.建立新錶: create table user (u_id integer primary key,u_name varchar(20),u_age varchar(4));
3.匯入資料; insert into user select u_id,u_name,"18" from _temp_user; //原表中沒有的要自己設個預設值
4.刪除臨時表; drop table_temp_user;
本節我們對sqlite的事務,大二進位制儲存,******cursoradapter以及資料庫公升級的 一些問題進行了**,而關於sqlite的東西,我們暫時就學這麼多; matlab下使用sqlite資料庫
操作的緣故,致使所有的db檔案都跑到了matlab的預設路徑下,導致自己誤以為一直在操作當前資料夾下的db檔案,而實際上已經在預設路徑下新建了db檔案,且是空內容的。在database資料夾下,寫了m檔案,執行後發現db檔案依然在預設路徑下。綜上可以發現,還是需要給它個絕對的路徑。conn data...
windows 下建立 sqlite 資料庫
說明 windows 下執行建立 sqlite 資料庫命令後資料庫檔案不會馬上生成,需要建立表以後才會生成。1.將 sqlite3.exe 檔案放在任何位置 如放在 d tools 2.在 cmd 下進入到 d tools 下 3.在 cmd 命令提示符下輸入 sqlite3 test.db tes...
Android下用Sqlite資料庫儲存資料
第一步 寫個類 繼承 sqliteopenhelper 1 public class mydatabaseopenhelper extends sqliteopenhelper 第二步 新增乙個建構函式,並且 指定必要的引數 context 應用程式上下文 name 資料庫的名稱 factory 游...