<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 6.3.2 數據存儲與訪問之——又見SQLite數據庫 ## 本節引言: > 學習完上一節,關于Android中的SQLite的基本操作,你就已經掌握了,而在本節我們將會學習 一些稍微高級一點的東西,數據庫事務,怎么將大二進制數據存儲到數據庫中,以及版本升級時 數據庫如何處理!好的,開始本節內容! ## 1.SQLite事務 ![](http://www.runoob.com/wp-content/uploads/2015/09/29572776.jpg) 簡單點說就是:寫在事務里的所有數據庫操作都成功,事務提交,否則,事務回滾,就是回到前面 的狀態——未執行數據庫操作的時候!另外,前面我們也將了,在data/data/&lt;包名&gt;/database/目錄 下除了有我們創建的db文件外,還有一個xxx.db-journal這個文件就是用來讓數據庫支持事務而 產生的 臨時的日志文件! ## 2.SQLite存儲大二進制文件 當然,一般我們很少往數據庫中存儲大二進制文件,比如圖片,音頻,視頻等,對于這些我們一般 是存儲文件路徑,但總會有些奇葩的需求,某天你突然想把這些文件存到數據庫里,下面我們以 圖片為例子,將圖片保存到SQLite中,以及讀取SQLite中的圖片! ![](http://www.runoob.com/wp-content/uploads/2015/09/83617087.jpg) ## 3.SimpleCursorAdapter綁定數據庫數據 當然,這個玩玩可以,還是不建議使用,盡管用起來很簡單! 其實在講ContentProvider我們就使用過這個東西來綁定聯系人列表!這里就不寫實例了, 直接上核心代碼!需要的自己搗鼓搗鼓就好了,另外,現在我們一般很少自己寫數據庫的東西 ,一般是通過第三方的框架:ormlite,greenDao等,在進階部分,我們會再來學習~ ![](http://www.runoob.com/wp-content/uploads/2015/09/21347521.jpg) ## 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.0 | 1 | 第一個版本,包含兩個字段... | | v1.1 | 2 | 數據保留,新增user_name字段 | ### 2)一些疑問以及相關解決方案 **①應用升級,數據庫文件是否會刪除?** > 答:不會!數據什么的都在! **②如果我想刪除表中某個字段或者增加一個新的字段,原先的數據還在嗎?** > 答:在的! **③你剛說的那種粗暴的更新數據庫版本的方式,不保留數據的,可以貼下嗎?** > 答:可以,這里用的是第三方的ormlite,你也可以自己寫數據庫創建以及刪除的代碼: ![](http://www.runoob.com/wp-content/uploads/2015/09/83955871.jpg) **④比如是這種,假如我們已經升級到第三個版本了,我們在第二個版本增加了一個表,** **然后第三個版本也增加了一個表,加入用戶直接從第一個版本升級到第三個版本,這樣** **沒經過第二個版本,就沒有增加的那個表,這可怎么破?** > 答:很簡單,我們可以在onUpgrade()里寫一個switch(),結構如下: > > ``` > public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, > int arg2, int arg3) { > switch(arg2){ > case 1: > db.execSQL(第一個版本的建表語句); > case 2: > db.execSQL(第二個版本的建表語句); > case 3: > db.execSQL(第三個版本的建表語句); > } > } > > ``` > > 細心的你可能發現這里并沒有寫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的東西,我們暫時就學這么多,關于第三方的使用,以及 一些高深的話題,我們到進階的時候再和大家一起去研究~本節就到這里,謝謝~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看