(保存游戏数据 [下文])详解SQLITE存储方式 并把SQLITE的数据库文件...

(保存游戏数据 [下文])详解SQLITE存储方式 并把SQLITE的数据库文件...

2023年7月15日发(作者:)

对于游戏中的数据进行保存方式,在Android中常用的有四种保存方式,这里我先给大家统一先简单的介绍下:Preference此保存方式试用于简单数据的保存,文如其名属于配置性质的保存,不适合数据比较大的保存方式;2.文件存储(FIleInputStream/FileOutputStream)此保存方式比较适合游戏的保存和使用,可以保存较大的数据,因为相对于SQLite来说更容易让童鞋们接受,此方式不仅能把数据存储在系统中也能将数据保存到SDcard中;此保存方式比较适合游戏的保存和使用,可以保存较大的数据,并且可以将自己的数据存储到文件系统或者数据库当中,也可以将自己的数据存储到SQLite数据库当中,也能将数据保存到SDcard中;tProvider(不推荐用于游戏保存)此保存方式不推荐用于游戏保存,因为此方式不仅能存储较大数据,还支持多个程序之间就的数据进行交换!!!但是由于游戏中基本就不可能去访问外部应用的数据,所以对于此方式我不予讲解,有兴趣的可以去自行百度google学习;以上简单的对几种常用的保存方式进行的概述,那么,下面会详细的去分析每个的优缺点以及每种保存的实现和需要注意的地方!下面我首先向大家介绍第一种保存方式:保存方式之:《SharedPreference》优点:简单、方便、适合简单数据的快速保存缺点:1.存数的文件只能在同一包内使用,不能在不同包之间使用!2.默认将数据存放在系统路径下/data/data//,没有找到放SD卡上的方法。总结:其实本保存方式如同它的名字一样是个配置保存,虽然方便,但只适合存储比较简单的数据!:[xhtml:showcolumns]viewplaincopyprint?·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······1501.2.5.8.10.13.15.18.20.23.10.12.14.16.18.20.

* @author Himi * @解释 此类我们只需要传建一个构造函数 以及重写两个方法 *

*/public class MySQLiteOpenHelper extends SQLiteOpenHpublic final static int VERSION = 1;// 版本public final static String TABLE_NAME = "hipublic final static String ID = "id";// 后面public final static String TEXT = "text";public static final String DATABASE_NAME =

public MySQLiteOpenHelper(Context context)

感觉这样代码比较让大家更容易理解和寻找,当然如果童鞋们不我喜欢代码中立即附上解释,喜欢,可以告诉我,我改~嘿嘿~下面看最重要的MainActivity中的代码:[java:showcolumns]viewplaincopyprint?·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······;;ption;ty;tValues;;Database;;;;Manager;kListener;;ew;15.//------------第三种保存方式--------《SQLite》---------16./**17.*@authorHimi18.*@保存方式:SQLite轻量级数据库、19.*@优点:可以将自己的数据存储到文件系统或者数据库当中,也可以将自己的数据存20.*储到SQLite数据库当中,还可以存到SD卡中21.*@注意1:数据库对于一个游戏(一个应用)来说是私有的,并且在一个游戏当中,22.*数据库的名字也是唯一的。23.*@注意2apk中创建的数据库外部的进程是没有权限去读/写的,24.*我们需要把数据库文件创建到sdcard上可以解决类似问题.25.*@注意3当你删除id靠前的数据或者全部删除数据的时候,SQLite不会自动排序,26.*也就是说再添加数据的时候你不指定id那么SQLite默认还是在原有id最后添加一条新数据27.*@注意4android中的SQLite语法大小写不敏感,也就是说不区分大小写;28.*29.*/classMainActivityextendsActivityimplementsOnClickListener{eButtonbtn_addOne,btn_deleteone,btn_check,btn_deleteTable,_edit,btn_newTable;eTextViewtv;eMySQLiteOpenHelpermyOpenHelper;//创建一个继承SQLiteOpenHelper类实例eSQLiteDatabasemysql;36.//---------------以下两个成员变量是针对在SD卡中存储数据库文件使用37.//privateFilepath=newFile("/sdcard/himi");//创建目录38.//privateFilef=newFile("/sdcard/himi/");//创建文件39.@voidonCreate(BundlesavedInstanceState){te(savedInstanceState);dow().setFlags(_FULLSCREEN,_FULLSCREEN);tWindowFeature(E_NO_TITLE);tentView();=(TextView)findViewById(_title);_addOne=(Button)findViewById(_addOne);_check=(Button)findViewById(_check);_deleteone=(Button)findViewById(_deleteOne);_deleteTable=(Button)findViewById(_deleteTable);_newTable=(Button)findViewById(_newTable);_edit=(Button)findViewById(_edit);_lickListener(this);_lickListener(this);_lickListener(this);_lickListener(this);_lickListener(this);_lickListener(this);Helper=newMySQLiteOpenHelper(this);//实例一个数据库辅助器60.//备注1----如果你使用的是将数据库的文件创建在SD卡中,那么创建数据库mysql如下操作:61.//if(!()){//目录存在返回false62.//();//创建一个目录63.//}64.//if(!()){//文件存在返回false65.//try{66.//NewFile();//创建文件67.//}catch(IOExceptione){68.////TODOAuto-generatedcatchblock69.//tackTrace();70.//}71.//}72.}73.@voidonClick(Viewv){{76.//备注2----如果你使用的是将数据库的文件创建在SD卡中,那么创建数据库mysql如下操作:77.//mysql=CreateDatabase(f,null);78.//备注3---如果想把数据库文件默认放在系统中,那么创建数据库mysql如下操作:=tableDatabase();//实例数据库(v==btn_addOne){//添加数据81.//----------------------读写句柄来插入---------82.//ContentValues其实就是一个哈希表HashMap,key值是字段名称,83.//Value值是字段的值。然后通过ContentValues的put方法就可以84.//把数据放到ContentValues中,然后插入到表中去!tValuescv=newContentValues();(,"测试新的数据");(_NAME,null,cv);88.//inser()第一个参数标识需要插入操作的表名89.//第二个参数:默认传null即可90.//第三个是插入的数据91.//----------------------SQL语句插入--------------92.//StringINSERT_DATA=93.//"INSERTINTOhimi(id,text)values(1,'通过SQL语句插入')";94.//L(INSERT_DATA);t("添加数据成功!点击查看数据库查询");96.}elseif(v==btn_deleteone){//删除数据97.//----------------------读写句柄来删除("himi",+"=1",null);99.//第一个参数需要操作的表名100.//第二个参数为id+操作的下标如果这里我们传入null,表示全部删除101.102.103.104.105.106.107.108.109.110.111.112.113.114.115.116.117.118.119.120.121.122.123.124.125.126.127.128.129.130.131.132.133.134.135.//第三个参数默认传null即可//-----------------------SQL语句来删除//StringDELETE_DATA="DELETEFROMhimiWHEREid=1";//L(DELETE_DATA);t("删除数据成功!点击查看数据库查询");}elseif(v==btn_check){//遍历数据//备注4------Cursorcur=ry("SELECT*FROM"+_NAME,null);if(cur!=null){Stringtemp="";inti=0;while(Next()){//直到返回false说明表中到了数据末尾temp+=ing(0);//参数0指的是列的下标,这里的0指的是id列temp+=ing(1);//这里的0相对于当前应该是咱们的text列了i++;temp+="";//这里是我整理显示格式,呵呵~if(i%3==0)//这里是我整理显示格式,呵呵~temp+="/n";//这里是我整理显示格式,呵呵~}t(temp);}}elseif(v==btn_edit){//修改数据//------------------------句柄方式来修改-------------ContentValuescv=newContentValues();(,"修改后的数据");("himi",cv,"id"+"="+ng(3),null);//------------------------SQL语句来修改-------------//StringUPDATA_DATA=//"UPDATEhimiSETtext='通过SQL语句来修改数据'WHEREid=1";//L(UPDATA_DATA);t("修改数据成功!点击查看数据库查询");}elseif(v==btn_deleteTable){//删除表L("DROPTABLEhimi");t("删除表成功!点击查看数据库查询");}elseif(v==btn_newTable){//新建表StringTABLE_NAME="himi";StringID="id";StringTEXT="text";Stringstr_sql2="CREATETABLE"+TABLE_NAME+"("+ID+"INTEGERPRIMARYKEYAUTOINCREMENT,"+TEXT+"text);";L(str_sql2);t("新建表成功!点击查看数据库查询");}//删除数据库://Database("");}catch(Exceptione){t("操作失败!");}finally{//如果try中异常,也要对数据库进行关闭();}}}package ;import ;import ption;import ty;import tValues;import ;import Database;import ;import ;import ;import Manager;import kListener;import ;import ew;// ------------第三种保存方式--------《SQLite》-----/** * @author Himi * @保存方式:SQLite 轻量级数据库、以上代码中我们实现了两种存储方式:一种存储默认系统路径/-databases下,另外一种则是保存在了/sdcard-himi下,生成数据库文件那么这里两种实现方式大概步骤和区别说下:-----------如果我们使用默认系统路径存储数据库文件:第一步:新建一个类继承SQLiteOpenHelper;写一个构造,重写两个函数!第二步:在新建的类中的onCreate(SQLiteDatabasedb)方法中创建一个表;第三步:在进行删除数据、添加数据等操作的之前我们要得到数据库读写句柄得到一个数据库实例;注意:继承写这个辅助类,是为了在我们没有数据库的时候自动为我们生成一个数据库,并且生成数据库文件,这里也同时创建了一张表,因为我们在onCreate里是在数据库中创建一张表的操作;这里还要注意在我们new这个我们这个MySQLiteOpenHelper类实例对象的时候并没有创建数据库哟~!而是在我们调用(备注WritableDatabase()这个方法得到数据库读写句柄的时候,android会分析是否已经有了数据库,如果没有会默认为我们创建一个数据库并且在系统路径-databases下生成文件!(如果我们使用sd卡存储数据库文件,就没有必要写这个类了,而是我们自己Open自己的文件得到一个数据库,西西,反而方便~)-----------如果我们需要把数据库文件存储到SD卡中:第一步:确认模拟器存在SD卡,关于SD卡的两种创建方法见我的博文:【Android2D游戏开发之十】第二步:(备注1)先创建SD卡目录和路径已经我们的数据库文件!这里不像上面默认路径中的那样,如果没有数据库会默认系统路径生成一个数据库和一个数据库文件!我们必须手动创建数据库文件!第三步:在进行删除数据、添加数据等操作的之前我们要得到数据库读写句柄得到一个数据库实例;(备注2)此时的创建也不是像系统默认创建,而是我们通过打开第一步创建好的文件得到数据库实例。这里仅仅是创建一个数据库!!!!第四步:在进行删除数据、添加数据等操作的之前我们还要创建一个表!第五步:在配置文件声明写入SD卡的权限,上一篇已经介绍权限了,不知道的自己去看下吧。有些童鞋不理解什么默认路径方式中就有表?那是因为我们在它默认给我们创建数据库的时候我们有创建表的操作,就是MySQLiteOpenHelper类中的onCreate()方法里的操作!所以我们如果要在进行删除数据、添加数据等操作的之前还要创建一个表,创建表的方法都是一样的。总结:不管哪种方式我们都要-创建数据库-创建表-然后进行操作!备注4:在Android中查询数据是通过Cursor类来实现的,当我们使用()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体方法如下:以下是方法和说明:movefalse以当前的位置为参考,将Cursor移动到指定的位置,成功返回true,失败返回moveToPosition将Cursor移动到指定的位置,成功返回true,失败返回falsemoveToNextmoveToLast将Cursor向前移动一个位置,成功返回true,失败返回false将Cursor向后移动一个位置,成功返回true,失败返回false。movetoFirst将Cursor移动到第一行,成功返回true,失败返回falseisBeforeFirst返回Cursor是否指向第一项数据之前isAfterLastisClosedisFirstisLastisNull返回Cursor是否指向最后一项数据之后返回Cursor是否关闭返回Cursor是否指向第一项数据返回Cursor是否指向最后一项数据返回指定位置的值是否为nullgetCount返回总的数据项数getInt返回当前行中指定的索引数据对于SQLite的很多童鞋有接触过,但是就不知道怎么存储在SD中,所以我也研究了下,这篇也写了把sd卡中的方式也提供给大家。OK这元旦放假几天就光给大家写这个了,呵呵~凌晨2点了,咳咳~该睡觉了。(我一般凌成3点睡觉,早8点起来上班呵呵~习惯了~)(推荐大家订阅本博客,因为咱的更新速度可是很快的~娃哈哈)

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689429267a246773.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信