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,基本知识就介绍到这里,下面开始上代码:还是按照我的一贯风格,代码中该解释的地方都已经在代码中及时注释和讲解了!
顺便来张项目截图:
![](http://hi.csdn.net/attachment/201101/3/7211253_1294079255A3Ga.png)
先给出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 返回当前行中指定的索引数据
对于SQLite的很多童鞋有接触过,但是就不知道怎么存储在SD中,所以我也研究了下,这篇也写了把sd卡中的方式也提供给大家。
OK 这元旦放假几天就光给大家写这个了,呵呵~凌晨2点了,咳咳~该睡觉了。(我一般凌成3点睡觉,早8点起来上班呵呵~习惯了~)
(推荐大家订阅本博客,因为咱的更新速度可是很快的~娃哈哈)
本篇源码:http://download.csdn.net/source/2959222
分享到:
相关推荐
Android 数据库SQLite 详解,简单学好SQLite
android之SQLite数据库开发详解: Android 开发中使用 SQLite 数据库 简介: SQLite 是一款非常流行的嵌入式数据库,它支持 SQL 查询,并且只用很少的内存。Android 在运行时集成了 SQLite,所以每个 Android 应用...
在Android studio上实现了sqlite的数据的新建、查询、添加、删除等功能。
Android中数据存储--采用SQLite存储数据及在SDCard中创建数据库源码 http://blog.csdn.net/cjjky/article/details/6578393
本文将从 Android 手机 App 程序开发的角度,对 SQLite 数据库在 Android手机 App 程序中的应用进行深入分析和讨论,并介绍了 SQLite 数据库在 Android 手机 App 程序中的实际应用案例。 1. Android 手机 App 程序...
实验十 使用SQLite数据库存储数据
Android 实验报告的主要目的是熟悉 Android 平台的文件操作、掌握 Android SQLite 数据库的设计和应用、熟悉 XML 和 JSON 文件的读取。通过本实验,用户可以掌握 Android 平台的基本操作和数据库应用。 二、实验...
我们在使用ListView的时候需要和数据进行绑定,那么问题来了,如何获取SQLite数据库中的数据并动态的显示到ListView当中呢?其实过程很简单:首先要获取SQLite数据(当然首先你要创建一个SQLite数据库并填写了一些...
一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。 SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。 SQLite 是自给自足的,这意味着不需要任何外部的依赖。 ...
前情提要:Android 数据库(SQLite) 【简介、创建、使用(增删改查、事务、实战演练)、数据显示控件(ListView、Adapter、实战演练)】 https://blog.csdn.net/weixin_44949135/article/details/105955663 Android ...
Android使用SharedPreferences和SQLite数据库实现数据存储
雨松MOMO带你做游戏 Android软件开发之数据库SQLite 详解源码 欢迎大家下载阅读。
Android 平台中的 SQLite 数据库在存储 DateTime 类型的数据时会遇到一些问题。本文将详细介绍这些问题和解决方案。 日期类型数据的存储问题 ------------------------- 在 SQLite 中,日期类型数据的存储方式有...
通过相关配置,删除数据后,实现SQLite3设置数据库文件自动收缩
android应用,将外部的sqlite数据库导入到应用的私有空间中,源db文件置于assets目录下,如果源文件大小超过1M,使用Filesplit分割为不超过1M的小文件,那么就将所有分小文件置于assets目录下,本工程里已带...
Android 登录注册 数据库SQLite 验证,导出数据库到SD卡 Android 登录注册 数据库SQLite 验证,导出数据库到SD卡
Android Studio编写的Android存储示例。其中包括:使用自带的SharedPreferences存取;存储数据到内存;存储数据到SD卡;存储数据到SQLite数据库。
一个android读取sqlite数据库的数据并用listview显示demo,如有问题及时提醒。
SQLiteDatabase还专门提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query() 。
sqlite3数据库文件