Himi 原创, 欢迎转载,转载请在明显处注明! 谢谢。
原文地址: http://blog.csdn.net/xiaominghimi/archive/2011/01/04/6114629.aspx
上一篇跟各位童鞋介绍了SharedPreference 和 File流如何存储数据,并且推荐使用FileOutputStream/FileInputStream来存储咱们游戏数据,那么这一篇则是像大家介绍另外一种适合游戏数据存储的方式:SQLite 轻量级数据库!
先介绍几个基本概念知识:
什么是SQLite:
SQLite是一款轻量级数据库,它的设计目的是嵌入式,而且它占用的资源非常少,在嵌入式设备中,只需要几百KB!!!!!
SQLite的特性:
- 轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
- 独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
- 隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
- 跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。
- 多语言接口
SQLite 数据库支持多语言编程接口。
-
安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据.
优点:1.能存储较多的数据。
2.能将数据库文件存放到SD卡中!
什么是 SQLiteDatabase?
一个 SQLiteDatabase 的实例代表了一个SQLite 的数据库,通过SQLiteDatabase 实例的一些方法,我们可以执行SQL 语句,对数 据库进行增、删、查、改的操作。需要注意的是,数据库对于一个应用来说是私有的,并且在一个应用当中,数据库的名字也是惟一的。
什么是 SQLiteOpenHelper ?
根据这名字,我们可以看出这个类是一个辅助类。这个类主要生成一个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的 方法getWritableDatabase(),或者getReadableDatabase()方法的时候,如果当时没有数据,那么Android 系统就会自动生成一 个数 据库。SQLiteOpenHelper 是一个抽象类,我们通常需要继承它,并且实现里边的3 个函数,
什么是 ContentValues 类?
ContentValues 类和Hashmap/Hashtable 比较类似,它也是负责存储一些名值对,但是它存储的名值对当中的名是一个
String 类型,而值都是基本类型。
什么是 Cursor ?
Cursor 在Android 当中是一个非常有用的接口,通过Cursor 我们可以对从数据库查询出来的结果集进行随 机的读写访问。
OK,基本知识就介绍到这里,下面开始上代码:还是按照我的一贯风格,代码中该解释的地方都已经在代码中及时注释和讲解了!
顺便来张项目截图:
先给出xml:
xml中定义了我们需要练习用到的几个操作按钮,这里不多解释了,下面看java源码:先看我们继承的 SQLiteOpenHelper 类
下面看最重要的MainActivity中的代码:
以上代码中我们实现了两种存储方式:
一种存储默认系统路径/data-data-com.himi-databases下,另外一种则是保存在了/sdcard-himi下,生成数据库文件himi.db
那么这里两种实现方式大概步骤和区别说下:
-----------如果我们使用默认系统路径存储数据库文件:
第一步:新建一个类继承SQLiteOpenHelper;写一个构造,重写两个函数!
第二步:在新建的类中的onCreate(SQLiteDatabase db) 方法中创建一个表;
第三步:在进行删除数据、添加数据等操作的之前我们要得到数据库读写句柄得到一个数据库实例;
注意: 继承写这个辅助类,是为了在我们没有数据库的时候自动为我们生成一个数据库,并且生成数据库文件,这里也同时创建了一张表,因为我们在onCreate里是在数据库中创建一张表的操作;这里还要注意在我们new 这个我们这个MySQLiteOpenHelper 类实例对象的时候并没有创建数据库哟~!而是在我们调用 (备注3)MySQLiteOpenHelper ..getWritableDatabase() 这个方法得到数据库读写句柄的时候,android 会分析是否已经有了数据库,如果没有会默认为我们创建一个数据库并且在系统路径data-data-com.himi-databases下生成himi.db 文件!
(如果我们使用sd卡存储数据库文件,就没有必要写这个类了,而是我们自己Open自己的文件得到一个数据库,西西,反而方便~ )
-----------如果我们需要把数据库文件存储到SD卡中:
第一步:确认模拟器存在SD卡,关于SD卡的两种创建方法见我的博文:【Android 2D游戏开发之十】
第二步:(备注1)先创建SD卡目录和路径已经我们的数据库文件!这里不像上面默认路径中的那样,如果没有数据库会默认系统路径生成一个数据库和一个数据库文件!我们必须手动创建数据库文件!
第三步:在进行删除数据、添加数据等操作的之前我们要得到数据库读写句柄得到一个数据库实例;(备注2)此时的创建也不是像系统默认创建,而是我们通过打开第一步创建好的文件得到数据库实例。这里仅仅是创建一个数据库!!!!
第四步:在进行删除数据、添加数据等操作的之前我们还要创建一个表!
第五步:在配置文件AndroidMainfest.xml 声明写入SD卡的权限,上一篇已经介绍权限了,不知道的自己去看下吧。
有些童鞋不理解什么默认路径方式中就有表?那是因为我们在它默认给我们创建数据库的时候我们有创建表的操作,就是MySQLiteOpenHelper类中的onCreate()方法里的操作!所以我们如果要在进行删除数据、添加数据等操作的之前还要创建一个表,创建表的方法都是一样的。
总结:不管哪种方式我们都要-创建数据库-创建表-然后进行操作!
备注4:
在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体方法如下:
以下是方法和说明:
move 以当前的位置为参考,将Cursor移动到指定的位置,成功返回true, 失败返回false
moveToPosition 将Cursor移动到指定的位置,成功返回true,失败返回false
moveToNext 将Cursor向前移动一个位置,成功返回true,失败返回false
moveToLast 将Cursor向后移动一个位置,成功返回true,失败返回 false。
movetoFirst 将Cursor移动到第一行,成功返回true,失败返回false
isBeforeFirst 返回Cursor是否指向第一项数据之前
isAfterLast 返回Cursor是否指向最后一项数据之后
isClosed 返回Cursor是否关闭
isFirst 返回Cursor是否指向第一项数据
isLast 返回Cursor是否指向最后一项数据
isNull 返回指定位置的值是否为null
getCount 返回总的数据项数
getInt 返回当前行中指定的索引数据
本篇源码:http://download.csdn.net/source/2959222
分享到:
相关推荐
在游戏开发过程中,将SQLite数据库文件存储在外部存储(如SD卡)中也是一项常见的需求,这样做的好处是可以利用SD卡的大容量存储空间,并且在需要时容易卸载或移动数据文件。 文章中还提及了一些代码片段和XML布局...
本篇文章将主要探讨Android中的内部存储与外部存储之一——SD卡存储的基本概念、特点及其使用方法。 #### 二、Android内部存储 Android内部存储指的是应用自身的私有存储空间,通常位于`/data/data/<package name>...
开发者需要编写代码来获取外部存储(如SD卡)上的音乐文件,并将相关信息存入SQLite数据库。 **八、权限管理** 考虑到Android系统的权限模型,开发者必须在Manifest文件中声明所需的权限,如读取外部存储权限,以便...
理解Android中的文件路径对于开发者来说至关重要,因为这关系到如何正确地存储、读取和操作文件。本篇文章将深入探讨Android文件路径的各个方面。 1. **内部存储** - **/data/data/包名**: 这是Android应用的私有...
应用的数据保存在/data/data/包名/目录下,包括SQLite数据库、首选项文件、以及其他应用产生的文件。Android系统负责管理这些文件的生命周期,当应用卸载时,这些文件也会被删除。 3. **外部存储** 外部存储通常是...
Android提供了多种实现数据持久化的途径,包括文件存储、SharedPreferences存储、SQLite数据库存储,甚至可以利用SD卡存储。每种方式都有其适用场景和优缺点,文件存储因其简单直接而常用于保存原始格式数据。 ...
**文件存储** 是 Android 应用程序中最常见的数据存储方式之一,它允许开发者直接读写文件,可以用来存放大量数据,包括文本、图片、音频等多媒体文件。 **存储位置**: - 默认位置位于 `/data/data/<包>/files/***...
- 在使用SQLite时要注意权限问题,例如在SD卡上创建数据库文件需要外部存储访问权限。 - 使用内存数据库时,数据不会持久化保存,应用程序退出后数据将丢失。 - 在执行SQL语句前应确保数据库连接已正确建立。 #### ...
除了文件存储,Android还提供了SharedPreferences用于存储键值对,SQLite数据库用于结构化数据,ContentProvider用于跨应用数据共享,以及外部存储(SD卡)等存储方式,可以根据实际需求选择合适的方式。...
在Android应用开发中,数据存储是一项至关重要的任务,它使得应用程序能够持久化数据,以便在用户退出应用后还能保存状态,或者在下次打开应用时能够快速恢复。Android提供了多种本地存储机制,以适应不同的数据类型...
Android系统提供了多种数据存储方式,包括文件存储、SharedPreferences存储、SQLite数据库存储和ContentProvider存储等。 文件存储是Android中的一种基本存储方式,它允许开发者将数据保存到文件中,供后续使用。...
### Android 文件系统详解 在深入探索Android文件系统之前,我们需要明确一点:虽然Android基于Linux内核,但它的文件系统结构与传统的Linux系统有所不同。本文将详细介绍Android文件系统的结构及其核心组成部分。 ...
9. **sqlite3**:这是一个SQLite数据库管理工具,可以查看、修改和管理Android应用中使用的SQLite数据库文件。 10. **Traceview**:Traceview是一个性能分析工具,它可以将应用程序的日志转化为图形化视图,帮助...
`ExternalStorage`用于保存到共享外部存储空间,比如SD卡或其他可移动存储介质。这种存储方式下的文件是全局可读的,当用户通过USB连接电脑时,可以访问这些文件。 **检查外部存储状态**: - 使用`Environment....
4. **SD卡资源扫描**:在Android中,可以使用`MediaScannerConnection`类来扫描SD卡上的媒体文件。通过调用`scanFile()`方法,将SD卡路径作为参数传入,系统会自动识别出音乐文件并将其添加到媒体库。这样,用户就...
android文件架构详解 cache : 是缓存临时文件夹,据说是除了T-mobile的OTA更新外,别无用处。 红色标记的两个文件是debug模式下产生的 data : 存放用户安装的软件以及各种数据。 default.prop : 默认配置文件 ...
SQLite数据库是Android中的核心组件,它提供了一个轻量级的关系型数据库。通过SQLiteOpenHelper类,开发者可以创建、升级和管理数据库。SQLite适合存储大量结构化的数据,如用户账户信息、应用设置等。然而,同样的...