日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

数据存储之-SQLite数据库二

發(fā)布時(shí)間:2025/3/21 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据存储之-SQLite数据库二 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.SQLite事務(wù)

簡(jiǎn)單點(diǎn)說(shuō)就是:寫在事務(wù)里的所有數(shù)據(jù)庫(kù)操作都成功,事務(wù)提交,否則,事務(wù)回滾,就是回到前面 的狀態(tài)——未執(zhí)行數(shù)據(jù)庫(kù)操作的時(shí)候!另外,前面我們也將了,在data/data/<包名>/database/目錄 下除了有我們創(chuàng)建的db文件外,還有一個(gè)xxx.db-journal這個(gè)文件就是用來(lái)讓數(shù)據(jù)庫(kù)支持事務(wù)而 產(chǎn)生的 臨時(shí)的日志文件!

2.SQLite存儲(chǔ)大二進(jìn)制文件

當(dāng)然,一般我們很少往數(shù)據(jù)庫(kù)中存儲(chǔ)大二進(jìn)制文件,比如圖片,音頻,視頻等,對(duì)于這些我們一般 是存儲(chǔ)文件路徑,但總會(huì)有些奇葩的需求,某天你突然想把這些文件存到數(shù)據(jù)庫(kù)里,下面我們以 圖片為例子,將圖片保存到SQLite中,以及讀取SQLite中的圖片!

3.SimpleCursorAdapter綁定數(shù)據(jù)庫(kù)數(shù)據(jù)

當(dāng)然,這個(gè)玩玩可以,還是不建議使用,盡管用起來(lái)很簡(jiǎn)單! 其實(shí)在講ContentProvider我們就使用過(guò)這個(gè)東西來(lái)綁定聯(lián)系人列表!這里就不寫實(shí)例了, 直接上核心代碼!需要的自己搗鼓搗鼓就好了,另外,現(xiàn)在我們一般很少自己寫數(shù)據(jù)庫(kù)的東西 ,一般是通過(guò)第三方的框架:ormlite,greenDao等,在進(jìn)階部分,我們會(huì)再來(lái)學(xué)習(xí)~

4.數(shù)據(jù)庫(kù)升級(jí)的一些集錦

1)什么是數(shù)據(jù)庫(kù)版本升級(jí)?怎么升級(jí)法?

答:假如我們開發(fā)了一款A(yù)PP,里面用到了數(shù)據(jù)庫(kù),我們假定這個(gè)數(shù)據(jù)庫(kù)版本為v1.0, 在這個(gè)版本,我們創(chuàng)建了一個(gè)x.db的數(shù)據(jù)庫(kù)文件,我們通過(guò)onCreate()方法創(chuàng)建了第一個(gè)table, t_user,里面有兩個(gè)字段:_id,user_id;后面我們想增加一個(gè)字段user_name,這個(gè)時(shí)候 我們就需要對(duì)數(shù)據(jù)庫(kù)表的結(jié)構(gòu)進(jìn)行修改了,而我們可以把更新數(shù)據(jù)庫(kù)的操作梵高onUpgrade() 方法中,我們只需要在實(shí)例化自定義SQLiteOpenHelper的時(shí)候,修改版本號(hào),比如把1改成2 這樣,就會(huì)自動(dòng)調(diào)用onUpgrade()的方法了!另外,對(duì)于每個(gè)數(shù)據(jù)庫(kù)版本我們都應(yīng)該做好 相應(yīng)的記錄(文檔),類似于下面這種:

2)一些疑問(wèn)以及相關(guān)解決方案

①應(yīng)用升級(jí),數(shù)據(jù)庫(kù)文件是否會(huì)刪除?

答:不會(huì)!數(shù)據(jù)什么的都在!

②如果我想刪除表中某個(gè)字段或者增加一個(gè)新的字段,原先的數(shù)據(jù)還在嗎?

答:在的!

③你剛說(shuō)的那種粗暴的更新數(shù)據(jù)庫(kù)版本的方式,不保留數(shù)據(jù)的,可以貼下嗎?

答:可以,這里用的是第三方的ormlite,你也可以自己寫數(shù)據(jù)庫(kù)創(chuàng)建以及刪除的代碼:

④比如是這種,假如我們已經(jīng)升級(jí)到第三個(gè)版本了,我們?cè)诘诙€(gè)版本增加了一個(gè)表, 然后第三個(gè)版本也增加了一個(gè)表,加入用戶直接從第一個(gè)版本升級(jí)到第三個(gè)版本,這樣 沒經(jīng)過(guò)第二個(gè)版本,就沒有增加的那個(gè)表,這可怎么破?

答:很簡(jiǎn)單,我們可以在onUpgrade()里寫一個(gè)switch(),結(jié)構(gòu)如下:

public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource,int arg2, int arg3) {switch(arg2){case 1:db.execSQL(第一個(gè)版本的建表語(yǔ)句);case 2:db.execSQL(第二個(gè)版本的建表語(yǔ)句);case 3:db.execSQL(第三個(gè)版本的建表語(yǔ)句); } }

細(xì)心的你可能發(fā)現(xiàn)這里并沒有寫break,這就對(duì)了,這是為了保證跨版本升級(jí)時(shí),每次數(shù)據(jù)庫(kù) 修改都能全部執(zhí)行到!這樣可以保證表結(jié)構(gòu)都是最新的!另外不一定是建表語(yǔ)句,修改表結(jié)構(gòu) 也可以哦

⑤舊表的設(shè)計(jì)太糟糕,很多字段要改,改動(dòng)太多,想建一個(gè)新表,但是表名要一樣 而且以前的一些數(shù)據(jù)要保存到新表中!

答:下面說(shuō)下思路:
1.將舊表改名成臨時(shí)表: ALTER TABLE User RENAME TO _temp_User;
2.創(chuàng)建新表: CREATE TABLE User (u_id INTEGER PRIMARY KEY,u_name VARCHAR(20),u_age VARCHAR(4));
3.導(dǎo)入數(shù)據(jù); INSERT INTO User SELECT u_id,u_name,”18” FROM _temp_User; //原表中沒有的要自己設(shè)個(gè)默認(rèn)值
4.刪除臨時(shí)表; DROP TABLE_temp_User;

總結(jié)

以上是生活随笔為你收集整理的数据存储之-SQLite数据库二的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。