成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

數據存儲與訪問之SQLite數據庫

存儲 存儲軟件
簡單點說就是:寫在事務里的所有數據庫操作都成功,事務提交,否則,事務回滾,就是回到前面 的狀態——未執行數據庫操作的時候!另外,前面我們也將了,在data/data/<包名>/database/目錄 下除了有我們創建的db文件外,還有一個xxx.db-journal這個文件就是用來讓數據庫支持事務而 產生的 臨時的日志文件!

1.SQLite事務

 

簡單點說就是:寫在事務里的所有數據庫操作都成功,事務提交,否則,事務回滾,就是回到前面 的狀態——未執行數據庫操作的時候!另外,前面我們也將了,在data/data/<包名>/database/目錄 下除了有我們創建的db文件外,還有一個xxx.db-journal這個文件就是用來讓數據庫支持事務而 產生的 臨時的日志文件!

[[236445]]

數據存儲與訪問之SQLite數據庫

2.SQLite存儲大二進制文件

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

數據存儲與訪問之SQLite數據庫

3.SimpleCursorAdapter綁定數據庫數據

當然,這個玩玩可以,還是不建議使用,盡管用起來很簡單! 其實在講ContentProvider我們就使用過這個東西來綁定聯系人列表!這里就不寫實例了, 直接上核心代碼!需要的自己搗鼓搗鼓就好了,另外,現在我們一般很少自己寫數據庫的東西 ,一般是通過第三方的框架:ormlite,greenDao等,在進階部分,我們會再來學習~

數據存儲與訪問之SQLite數據庫

4.數據庫升級的一些集錦

PS:好吧,這一塊我并沒有做過,始終是項目經驗不夠,公司的產品都是定位類的,剛看過公司 項目,發現前人留下的代碼是:onCreate()創建DB,然后onUpgrade()把前面的DB刪掉,然后 再調用onCreate()方法!看了幾個版本的代碼,發現并沒有數據庫升級的操作...沒得借鑒, 只能參考下別人的做法了,下面是小豬查閱資料后的一些歸納,如果有什么不對,歡迎指出, 可能有些第三方的框架已經弄好了這個,時間關系,就不慢慢去考究了!知道可以留言,謝謝!

1)什么是數據庫版本升級?怎么升級法?

 

答:假如我們開發了一款APP,里面用到了數據庫,我們假定這個數據庫版本為v1.0, 在這個版本,我們創建了一個x.db的數據庫文件,我們通過onCreate()方法創建了***個table, t_user,里面有兩個字段:_id,user_id;后面我們想增加一個字段user_name,這個時候 我們就需要對數據庫表的結構進行修改了,而我們可以把更新數據庫的操作梵高onUpgrade() 方法中,我們只需要在實例化自定義SQLiteOpenHelper的時候,修改版本號,比如把1改成2 這樣,就會自動調用onUpgrade()的方法了!另外,對于每個數據庫版本我們都應該做好 相應的記錄(文檔),類似于下面這種:

數據庫版本andoid對應版本內容v1.01***個版本,包含兩個字段...v1.12數據保留,新增user_name字段

2)一些疑問以及相關解決方案

①應用升級,數據庫文件是否會刪除?

答:不會!數據什么的都在!

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

答:在的!

③你剛說的那種粗暴的更新數據庫版本的方式,不保留數據的,可以貼下嗎?

答:可以,這里用的是第三方的ormlite,你也可以自己寫數據庫創建以及刪除的代碼:

數據存儲與訪問之SQLite數據庫

 

 

④比如是這種,假如我們已經升級到第三個版本了,我們在第二個版本增加了一個表, 然后第三個版本也增加了一個表,加入用戶直接從***個版本升級到第三個版本,這樣 沒經過第二個版本,就沒有增加的那個表,這可怎么破?

答:很簡單,我們可以在onUpgrade()里寫一個switch(),結構如下:

  1. public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, 
  2.  
  3. int arg2, int arg3) { 
  4.  
  5. switch(arg2){ 
  6.  
  7. case 1: 
  8.  
  9. db.execSQL(***個版本的建表語句); 
  10.  
  11. case 2: 
  12.  
  13. db.execSQL(第二個版本的建表語句); 
  14.  
  15. case 3: 
  16.  
  17. db.execSQL(第三個版本的建表語句); 
  18.  
  19.  

細心的你可能發現這里并沒有寫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的事務,大二進制存儲,SimpleCursorAdapter以及數據庫升級的 一些問題進行了探究,而關于SQLite的東西,我們暫時就學這么多,關于第三方的使用,以及 一些高深的話題,我們到進階的時候再和大家一起去研究

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2011-07-01 14:06:57

Qt sqlite

2011-03-03 11:07:57

Spring數據庫訪問ORM

2011-07-12 15:22:04

SQLite數據庫

2011-07-20 12:34:49

SQLite數據庫約束

2019-08-15 07:00:54

SQLite數據庫內存數據庫

2017-07-12 09:20:42

SQLite數據庫移植

2011-08-04 18:00:47

SQLite數據庫批量數據

2019-06-20 15:25:14

MySQLL數據庫存儲

2011-08-02 16:16:08

iPhone開發 SQLite 數據庫

2024-10-28 16:31:03

2011-08-24 13:49:45

Access數據庫轉化

2019-08-27 15:00:09

MySQL數據庫存儲

2010-06-30 14:24:08

SQL Server數

2011-07-05 10:16:16

Qt 數據庫 SQLite

2011-08-03 13:28:08

Oracle數據庫數據庫控制文件

2013-09-02 14:41:05

Java嵌入式SQLite

2010-04-16 13:34:00

Oracle Java

2013-06-14 09:54:04

Unity3D

2010-12-20 09:44:36

SQLite.C#

2011-08-10 15:46:29

數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色毛片大全 | 91一区二区三区在线观看 | 国产午夜精品一区二区 | 色婷婷av777 av免费网站在线 | 中文字幕精品一区二区三区精品 | 精品国产精品三级精品av网址 | 黄色网址在线免费观看 | 国产三级一区二区三区 | 免费国产黄网站在线观看视频 | 美女久久久久久久 | 黄色日本片 | 亚洲一区中文 | 丁香婷婷在线视频 | 久久大陆 | 视频在线观看一区 | 亚洲欧美成人影院 | 日本特黄特色aaa大片免费 | 网站国产 | 日韩av一区在线观看 | 在线观看精品视频网站 | 欧美激情精品久久久久久免费 | 久久午夜精品 | 国产成人精品一区 | 天天插天天搞 | 狠狠干美女 | 日韩一区二区福利视频 | 亚洲日韩中文字幕一区 | 欧美性精品| 91在线一区 | 亚洲精品电影网在线观看 | 成人教育av | 欧美日韩在线观看一区 | 午夜寂寞影院列表 | 国产精品久久 | 久久精品一区二区视频 | 国产精品福利网站 | 国产成人免费 | 在线欧美一区 | 国产精品欧美一区二区三区不卡 | av国产在线观看 | 在线黄色影院 |