首页 理论教育 使用SQLite进行Android游戏存储

使用SQLite进行Android游戏存储

时间:2023-10-22 理论教育 版权反馈
【摘要】:在Android中最为常用的存储方式是SQLite存储,这是一个轻量级的嵌入式数据库。SQLite遵守ACID关联式数据库管理系统,是为嵌入式系统所设计的产品,并且目前已经在很多嵌入式产品中使用。SQLite的突出优点是占用非常低的资源。在接下来的内容中,将通过一个具体实例来讲解使用SQLite存储的方法。类SQLiteOpenHelper是一个辅助类,功能是生成一个数据库,并对数据库的版本进行管理。类SQLiteOpenHelper是一个抽象类,在Android应用项目中通常需要继承这个类。

使用SQLite进行Android游戏存储

在Android中最为常用的存储方式是SQLite存储,这是一个轻量级嵌入式数据库。SQLite是Android系统自带的一个标准数据库,支持经典的SQL语句。SQLite遵守ACID关联式数据库管理系统,是为嵌入式系统所设计的产品,并且目前已经在很多嵌入式产品中使用。SQLite的突出优点是占用非常低的资源。在嵌入式设备中,可能只需要几百KB的内存即可。SQLite能够支持Windows、Linux、UNIX等主流操作系统,同时能够跟很多程序语言结合使用,例如C#、PHP和Java等。并且还支持ODBC接口,另外和MySQL、PostgreSQL这两款开源数据库管理系统相比,SQLite的处理速度更快。

注意:ACID是指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。

在接下来的内容中,将通过一个具体实例来讲解使用SQLite存储的方法。

978-7-111-54543-9-Part02-14.jpg

实例文件UserSQLite.java的具体实现流程如下。

1)定义类DatabaseHelper,此类承于类SQLiteOpenHelper,具体代码如下

978-7-111-54543-9-Part02-15.jpg

在上述代码中,首先分别重写了方法onCreate()和onUpgrade();然后在方法onCreate()中构造了一条SQL语句,并且通过db.execSQL(sql)执行了这条SQL语句。这条SQL语句的功能是生成了一张数据库表。

类SQLiteOpenHelper是一个辅助类,功能是生成一个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase()或者getReadableDatabase()时,如果当时没有数据,那么Android系统就会自动生成一个数据库。

类SQLiteOpenHelper是一个抽象类,在Android应用项目中通常需要继承这个类。在类SQLiteOpenHelper的实现中包含了如下3个方法。

■ 方法onCreate(SQLiteDatabase):在第一次生成数据库时会调用这个方法,并在这个

方法中生成数据库表。

■ 方法onUpgrade(SQLiteDatabase,int,int):当数据库需要升级的时候,Android系统

会主动地调用这个方法。在这个方法中删除数据表,并建立新的数据表,当然是否还

需要做其他操作,完全取决于应用的需求。

■ 方法onOpen(SQLiteDatabase):这是当打开数据库时的回调方法,一般不会用到。

(2)编写按钮处理事件,单击“插入两条记录”的按钮,如果数据成功插入到数据库中的diary表中,那么在界面的title区域就会成功显示。如图3-3所示。

978-7-111-54543-9-Part02-16.jpg

图3-3 插入成功

如果单击“添加两条数据”按钮,会执行监听器里的onClick()方法,并最终执行了上述程序里的insertItem()方法,具体代码如下。

978-7-111-54543-9-Part02-17.jpg

978-7-111-54543-9-Part02-18.jpg

在上述代码中,sql1和sql2是构造的两条标准SQL语句,如果读者对SQL语句不是很熟悉,可以参考相关的书籍。鉴于本书的重点是Android,所以对SQL语句的知识不进行详细介绍。Log.i()的功能是将参数内容打印到日志中,并且打印级别是Info级别;db.execSQL sql1)表示执行SQL语句。

Android支持5种打印输出级别,分别是Verbose、Debug、Info、Warning、Error,在应用程序中最常用的是Info级别,即将一些自己需要知道的信息打印出来。如图3-4所示。

978-7-111-54543-9-Part02-19.jpg

图3-4 打印输出级别

(3)单击“查询数据库”按钮,在屏幕界面的title区域会显示当前数据表中数据的条数因为前面插入了两条数据,所以现在单击“查询数据库”按钮后会显示为两条记录的提示。如图3-5所示。

978-7-111-54543-9-Part02-20.jpg

图3-5 查询数据

单击“查询数据库”按钮后会执行监听器里的onClick()方法,并最终执行了上述程序里的方法showItems(),具体代码如下。

978-7-111-54543-9-Part02-21.jpg

在上述代码中,语句“Cursor cur=db.query(TABLE_NAME,col,null,null,null,null,null)”的功能是,将查询到的数据放到一个Cursor当中。在这个Cursor里边封装了数据表TABLE_NAME中的所有条列。

方法query()的功能是查询数据,包含了如下7个参数。

■ 第1个参数:是数据库中表的名字,比如在这个例子,表的名字就是TABLE_NAME,

也就是“diary”。

■ 第2个参数:是我们想要返回数据包含的列的信息。在这个例子当中我们想要得到的

列有title、body,我们把这两个列的名字放到字符数组中。

■ 第3个参数:selection,相当于SQL语句的where部分,如果想返回所有的数据,那(www.xing528.com)

么就直接置为null。

■ 第4个参数:selectionArgs,在selection部分有可能用到“?”,那么在selectionArgs

定义的字符串会代替selection中的“?”。

■ 第5个参数:groupBy,定义查询出来的数据是否分组,如果为null则说明不用分组。

■ 第6个参数:having,相当于SQL语句当中的having部分。

■ 第7个参数:orderBy,用于描述我们期望的返回值是否需要排序,如果设置为null

则说明不需要排序。

注意:Cursor在Android当中是一个非常有用的接口,通过Cursor可以对从数据库查询出来的结果集进行随机的读写访问。

(4)单击“删除一条数据”按钮后,如果成功删除会在屏幕的标题(title)区域看到文字提示。如图3-6所示。

现在再次单击“查询数据库”按钮,会发现数据库中的记录少了一条。如图3-7所示。

当单击“删除一条数据”按钮,程序会执行监听器中的onClick方法,并最终执行了上述程序里的deleteItem()方法,其实现代码如下。

978-7-111-54543-9-Part02-22.jpg

978-7-111-54543-9-Part02-23.jpg

978-7-111-54543-9-Part02-24.jpg

图3-6 删除一条数据

978-7-111-54543-9-Part02-25.jpg

图3-7 查询数据

在上述代码中,通过“db.delete(TABLE_NAME,"title='haiyang'",null)”语句删除了一条title为“AA”的数据。如果有很多条title为“AA”的数据,则会全部删除。方法delete()中各个参数的具体说明如下。

■ 第一个参数:表示数据库表名,在这里是TABLE_NAME,也就是diary。

■ 第二个参数:相当于SQL语句当中的where部分,也就是描述了删除的条件。

如果在第二个参数当中有“?”,那么第三个参数中的字符串会依次替换在第二个参数当中出现的“?”。

5)单击“删除数据表”按钮后可以删除表diary,如图3-8所示

978-7-111-54543-9-Part02-26.jpg

图3-8 删除表

单击“删除数据表”按钮后会执行方法dropTable(),具体代码如下

978-7-111-54543-9-Part02-27.jpg

在上述代码中,构造了一个标准的删除数据表的SQL语句,然后执行语句db.execSQL(sql)。

(6)此时如果单击其他按钮可能会出现运行异常,如果单击“新建数据表”按钮,执行效果如图3-9所示。

此时再单击“查询数据库”按钮可以查看里边是否有数据存在,如图3-10所示。

单击“新建数据表”按钮后会执行方法CreateTable(),此方法的功能是重新建立数据表具体代码如下。

978-7-111-54543-9-Part02-28.jpg

978-7-111-54543-9-Part02-29.jpg

978-7-111-54543-9-Part02-30.jpg

图3-9 新建表

978-7-111-54543-9-Part02-31.jpg

图3-10 显示0条记录

在上述代码中,sql变量表示使用的是标准的SQL语句,功能是按要求建立一张新表“db.execSQL("DROP TABLE IF EXISTS diary")”表示如果存在表diary则先将其删除,因为在同一个数据库中不能出现两张同名字的表;“db.execSQL(sql)”语句用于执行SQL语句,这条SQL语句的功能是建立一个新表。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈