日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

【Android游戲開發(fā)十三】(保存游戲數(shù)據(jù) [下文]

系統(tǒng) 2765 0


Himi 原創(chuàng), 歡迎轉(zhuǎn)載,轉(zhuǎn)載請在明顯處注明! 謝謝。

原文地址: http://blog.csdn.net/xiaominghimi/archive/2011/01/04/6114629.aspx

上一篇跟各位童鞋介紹了SharedPreference 和 File流如何存儲數(shù)據(jù),并且推薦使用FileOutputStream/FileInputStream來存儲咱們游戲數(shù)據(jù),那么這一篇則是像大家介紹另外一種適合游戲數(shù)據(jù)存儲的方式:SQLite 輕量級數(shù)據(jù)庫!

先介紹幾個基本概念知識:

什么是SQLite:

SQLite是一款輕量級數(shù)據(jù)庫,它的設(shè)計目的是嵌入式,而且它占用的資源非常少,在嵌入式設(shè)備中,只需要幾百KB!!!!!

SQLite的特性:

  • 輕量級
    使用 SQLite 只需要帶一個動態(tài)庫,就可以享受它的全部功能,而且那個動態(tài)庫的尺寸想當小。
  • 獨立性
    SQLite 數(shù)據(jù)庫的核心引擎不需要依賴第三方軟件,也不需要所謂的“安裝”。
  • 隔離性
    SQLite 數(shù)據(jù)庫中所有的信息(比如表、視圖、觸發(fā)器等)都包含在一個文件夾內(nèi),方便管理和維護。
  • 跨平臺
    SQLite 目前支持大部分操作系統(tǒng),不至電腦操作系統(tǒng)更在眾多的手機系統(tǒng)也是能夠運行,比如:Android。
  • 多語言接口
    SQLite 數(shù)據(jù)庫支持多語言編程接口。
  • 安全性
    SQLite 數(shù)據(jù)庫通過數(shù)據(jù)庫級上的獨占性和共享鎖來實現(xiàn)獨立事務(wù)處理。這意味著多個進程可以在同一時間從同一數(shù)據(jù)庫讀取數(shù)據(jù),但只能有一個可以寫入數(shù)據(jù).

優(yōu)點:1.能存儲較多的數(shù)據(jù)。

2.能將數(shù)據(jù)庫文件存放到SD卡中!

什么是 SQLiteDatabase?

一個 SQLiteDatabase 的實例代表了一個SQLite 的數(shù)據(jù)庫,通過SQLiteDatabase 實例的一些方法,我們可以執(zhí)行SQL 語句,對數(shù) 據(jù)庫進行增、刪、查、改的操作。需要注意的是,數(shù)據(jù)庫對于一個應(yīng)用來說是私有的,并且在一個應(yīng)用當中,數(shù)據(jù)庫的名字也是惟一的。

什么是 SQLiteOpenHelper ?

根據(jù)這名字,我們可以看出這個類是一個輔助類。這個類主要生成一個數(shù)據(jù)庫,并對數(shù)據(jù)庫的版本進行管理。當在程序當中調(diào)用這個類的 方法getWritableDatabase(),或者getReadableDatabase()方法的時候,如果當時沒有數(shù)據(jù),那么Android 系統(tǒng)就會自動生成一 個數(shù) 據(jù)庫。SQLiteOpenHelper 是一個抽象類,我們通常需要繼承它,并且實現(xiàn)里邊的3 個函數(shù),

什么是 ContentValues 類?

ContentValues 類和Hashmap/Hashtable 比較類似,它也是負責存儲一些名值對,但是它存儲的名值對當中的名是一個

String 類型,而值都是基本類型。

什么是 Cursor ?

Cursor 在Android 當中是一個非常有用的接口,通過Cursor 我們可以對從數(shù)據(jù)庫查詢出來的結(jié)果集進行隨機的讀寫訪問。

OK,基本知識就介紹到這里,下面開始上代碼:還是按照我的一貫風格,代碼中該解釋的地方都已經(jīng)在代碼中及時注釋和講解了!

順便來張項目截圖:

【Android游戲開發(fā)十三】(保存游戲數(shù)據(jù) [下文])詳解SQLite存儲方式,并把SQLite的數(shù)據(jù)庫文件存儲在SD卡中!??!

先給出xml:

xml中定義了我們需要練習(xí)用到的幾個操作按鈕,這里不多解釋了,下面看java源碼:先看我們繼承的SQLiteOpenHelper 類

我喜歡代碼中立即附上解釋, 感覺這樣代碼 比較讓大家更容易理解和尋找,當然如果童鞋們不喜歡,可以告訴我,我改~嘿嘿~

下面看最重要的MainActivity中的代碼:

以上代碼中我們實現(xiàn)了兩種存儲方式:

一種存儲默認系統(tǒng)路徑/data-data-com.himi-databases下,另外一種則是保存在了/sdcard-himi下,生成數(shù)據(jù)庫文件himi.db

那么這里兩種實現(xiàn)方式大概步驟和區(qū)別說下:

----------- 如果我們使用默認系統(tǒng)路徑存儲數(shù)據(jù)庫文件:

第一步:新建一個類繼承SQLiteOpenHelper;寫一個構(gòu)造,重寫兩個函數(shù)!

第二步:在新建的類中的onCreate(SQLiteDatabase db) 方法中創(chuàng)建一個表;

第三步:在進行刪除數(shù)據(jù)、添加數(shù)據(jù)等操作的之前我們要得到數(shù)據(jù)庫讀寫句柄得到一個數(shù)據(jù)庫實例;

注意: 繼承寫這個輔助類,是為了在我們沒有數(shù)據(jù)庫的時候自動為我們生成一個數(shù)據(jù)庫,并且生成數(shù)據(jù)庫文件,這里也同時創(chuàng)建了一張表,因為我們在onCreate里是在數(shù)據(jù)庫中創(chuàng)建一張表的操作;這里還要注意在我們new 這個我們這個MySQLiteOpenHelper 類實例對象的時候并沒有創(chuàng)建數(shù)據(jù)庫喲~!而是在我們調(diào)用 ( 備注3) MySQLiteOpenHelper ..getWritableDatabase() 這個方法得到數(shù)據(jù)庫讀寫句柄的時候,android 會分析是否已經(jīng)有了數(shù)據(jù)庫, 如果沒有會默認為我們創(chuàng)建一個數(shù)據(jù)庫并且在系統(tǒng)路徑data-data-com.himi-databases下生成himi.db 文件!

(如果我們使用sd卡存儲數(shù)據(jù)庫文件,就沒有必要寫這個類了,而是我們自己Open自己的文件得到一個數(shù)據(jù)庫,西西,反而方便~ )

-----------如果我們需要把數(shù)據(jù)庫文件存儲到SD卡中:

第一步:確認模擬器存在SD卡,關(guān)于SD卡的兩種創(chuàng)建方法見我的博文:【Android 2D游戲開發(fā)之十】

第二步: (備注1) 先創(chuàng)建SD卡目錄和路徑已經(jīng)我們的數(shù)據(jù)庫文件!這里不像上面默認路徑中的那樣,如果沒有數(shù)據(jù)庫會默認系統(tǒng)路徑生成一個數(shù)據(jù)庫和一個數(shù)據(jù)庫文件!我們必須手動創(chuàng)建數(shù)據(jù)庫文件!

第三步:在進行刪除數(shù)據(jù)、添加數(shù)據(jù)等操作的之前我們要得到數(shù)據(jù)庫讀寫句柄得到一個數(shù)據(jù)庫實例; (備注2) 此時的創(chuàng)建也不是像系統(tǒng)默認創(chuàng)建,而是我們通過打開第一步創(chuàng)建好的文件得到數(shù)據(jù)庫實例。這里僅僅是創(chuàng)建一個數(shù)據(jù)庫?。。?!

第四步:在進行刪除數(shù)據(jù)、添加數(shù)據(jù)等操作的之前我們還要創(chuàng)建一個表!

第五步:在配置文件AndroidMainfest.xml 聲明寫入SD卡的權(quán)限,上一篇已經(jīng)介紹權(quán)限了,不知道的自己去看下吧。

有些童鞋不理解什么默認路徑方式中就有表?那是因為我們在它默認給我們創(chuàng)建數(shù)據(jù)庫的時候我們有創(chuàng)建表的操作,就是MySQLiteOpenHelper類中的onCreate()方法里的操作!所以我們?nèi)绻谶M行刪除數(shù)據(jù)、添加數(shù)據(jù)等操作的之前還要創(chuàng)建一個表,創(chuàng)建表的方法都是一樣的。

總結(jié):不管哪種方式我們都要-創(chuàng)建數(shù)據(jù)庫-創(chuàng)建表-然后進行操作!

備注4:

在Android中查詢數(shù)據(jù)是通過Cursor類來實現(xiàn)的,當我們使用SQLiteDatabase.query()方法時,會得到一個Cursor對象,Cursor指向的就是每一條數(shù)據(jù)。它提供了很多有關(guān)查詢的方法,具體方法如下:

以下是方法和說明:

move 以當前的位置為參考,將Cursor移動到指定的位置,成功返回true, 失敗返回false

moveToPosition 將Cursor移動到指定的位置,成功返回true,失敗返回false

moveToNext 將Cursor向前移動一個位置,成功返回true,失敗返回false

moveToLast 將Cursor向后移動一個位置,成功返回true,失敗返回 false。

movetoFirst 將Cursor移動到第一行,成功返回true,失敗返回false

isBeforeFirst 返回Cursor是否指向第一項數(shù)據(jù)之前

isAfterLast 返回Cursor是否指向最后一項數(shù)據(jù)之后

isClosed 返回Cursor是否關(guān)閉

isFirst 返回Cursor是否指向第一項數(shù)據(jù)

isLast 返回Cursor是否指向最后一項數(shù)據(jù)

isNull 返回指定位置的值是否為null

getCount 返回總的數(shù)據(jù)項數(shù)

getInt 返回當前行中指定的索引數(shù)據(jù)

對于SQLite的很多童鞋有接觸過,但是就不知道怎么存儲在SD中,所以我也研究了下,這篇也寫了把sd卡中的方式也提供給大家。

OK 這元旦放假幾天就光給大家寫這個了,呵呵~凌晨2點了,咳咳~該睡覺了。(我一般凌成3點睡覺,早8點起來上班呵呵~習(xí)慣了~)

(推薦大家訂閱本博客,因為咱的更新速度可是很快的~娃哈哈)

本篇源碼: http://download.csdn.net/source/2959222

【Android游戲開發(fā)十三】(保存游戲數(shù)據(jù) [下文])詳解SQLite存儲方式,并把SQLite的數(shù)據(jù)庫文件存儲在SD卡中?。?!


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 奉化市| 霍州市| 永定县| 田东县| 镶黄旗| 林州市| 新乡县| 西藏| 南昌县| 涿州市| 吉水县| 高雄县| 正安县| 渝北区| 库车县| 永嘉县| 夹江县| 梓潼县| 常德市| 永嘉县| 甘南县| 大余县| 将乐县| 拉萨市| 衢州市| 虞城县| 霍邱县| 罗江县| 绥中县| 辽阳县| 齐齐哈尔市| 铁力市| 临洮县| 衡阳市| 栖霞市| 习水县| 七台河市| 汪清县| 贵溪市| 炎陵县| 台山市|