Android开发中使用SQLite 数据库

作者&投稿:楚蒋 (若有异议请与网页底部的电邮联系)
~
SQPte 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQPte.
SQPte 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQPte 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQPte 的内核变得更加方便。
SQPte 基本上符合 SQL-92 标准,和其他的主要 SQL 数据库没什么区别。它的优点就是高效,Android 运行时环境包含了完整的 SQPte。
SQPte 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQPte 将检查它的类型。如果该类型与关联的列不匹配,则 SQPte 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQPte 称这为“弱类型”(manifest typing.)。
此外,SQPte 不支持一些标准的 SQL 功能,特别是外键约束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FPL OUTER JOIN, 还有一些 ALTER TABLE 功能。
除了上述功能外,SQPte 是一个完整的 SQL 系统,拥有完整的触发器,交易等等。
Android 集成了 SQPte 数据库
Android 在运行时(run-time)集成了 SQPte,所以每个 Android 应用程序都可以使用 SQPte 数据库。对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQPte 相当简单。但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQPte 数据库,Android 开发中,程序员需要学使用这些 API。
数据库存储在 data/ 项目文件夹 /databases/ 下。
Android 开发中使用 SQPte 数据库
Activites 可以通过 Content Provider 或者 Service 访问一个数据库。下面会详细讲解如果创建数据库,添加数据和查询数据库。
创建数据库
Android 不自动提供数据库。在 Android 应用程序中使用 SQPte,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQPteOpenHelper 帮助你创建一个数据库,你只要继承 SQPteOpenHelper 类,就可以轻松的创建数据库。SQPteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQPteOpenHelper 的子类,至少需要实现三个方法:
构造函数,调用父类 SQPteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 NPl),一个代表你正在使用的数据库模型版本的整数。
onCreate()方法,它需要一个 SQPteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
onUpgrage() 方法,它需要三个参数,一个 SQPteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。
下面示例代码展示了如何继承 SQPteOpenHelper 创建数据库:
pubPc class DatabaseHelper extends SQPteOpenHelper {
DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)
{
super(context, name, cursorFactory, version);
}
@Override
pubPc void onCreate(SQPteDatabase db) {
// TODO 创建数据库后,对数据库的操作
}
@Override
pubPc void onUpgrade(SQPteDatabase db, int PdVersion, int newVersion) {
// TODO 更改数据库版本的操作
}
@Override
pubPc void onOpen(SQPteDatabase db) {
super.onOpen(db);
// TODO 每次成功打开数据库后首先被执行
}
}
接下来讨论具体如何创建表、插入数据、删除表等等。调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQPteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容:
db=(new DatabaseHelper(getContext())).getWritableDatabase();
return (db == nPl) ? false : true;
上面这段代码会返回一个 SQPteDatabase 类的实例,使用这个对象,你就可以查询或者修改数据库。
当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQPteDatabase 的 Close() 方法来释放掉数据库连接。
创建表和索引
为了创建表和索引,需要调用 SQPteDatabase 的 execSQL() 方法来执行 DDL 语句。如果没有异常,这个方法没有返回值。
例如,你可以执行如下代码:
db.execSQL("CREATE TABLE mytable (_id INTEGER PRIMARY KEY
AUTOINCREMENT, title TEXT, value REAL);");
这条语句会创建一个名为 mytable 的表,表有一个列名为 _id,并且是主键,这列的值是会自动增长的整数(例如,当你插入一行时,SQPte 会给这列自动赋值),另外还有两列:title( 字符 ) 和 value( 浮点数 )。 SQPte 会自动为主键列创建索引。
通常情况下,第一次创建数据库时创建了表和索引。如果你不需要改变表的 schema,不需要删除表和索引 . 删除表和索引,需要使用 execSQL() 方法调用 DROP INDEX 和 DROP TABLE 语句。
给表添加数据
上面的代码,已经创建了数据库和表,现在需要给表添加数据。有两种方法可以给表添加数据。
像上面创建表一样,你可以使用 execSQL() 方法执行 INSERT, UPDATE, DELETE 等语句来更新表的数据。execSQL() 方法适用于所有不返回结果的 SQL 语句。例如:
db.execSQL("INSERT INTO widgets (name, inventory)"+
"VALUES ('Sprocket', 5)");
另一种方法是使用 SQPteDatabase 对象的 insert(), update(), delete() 方法。这些方法把 SQL 语句的一部分作为参数。示例如下:
ContentValues cv=new ContentValues();
cv.put(Constants.TITLE, "example title");
cv.put(Constants.VALUE, SensorManager.GRAVITY_DEATH_STAR_I);
db.insert("mytable", getNPlCPumnHack(), cv);
update()方法有四个参数,分别是表名,表示列名和值的 ContentValues 对象,可选的 WHERE 条件和可选的填充 WHERE 语句的字符串,这些字符串会替换 WHERE 条件中的“?”标记。update() 根据条件,更新指定列的值,所以用 execSQL() 方法可以达到同样的目的。
WHERE 条件和其参数和用过的其他 SQL APIs 类似。例如:
String[] parms=new String[] {"this is a string"};
db.update("widgets", replacements, "name=?", parms);
delete() 方法的使用和 update() 类似,使用表名,可选的 WHERE 条件和相应的填充 WHERE 条件的字符串。
#p#副标题#e#
查询数据库
类似 INSERT, UPDATE, DELETE,有两种方法使用 SELECT 从 SQPte 数据库检索数据。
1 .使用 rawQuery() 直接调用 SELECT 语句;
使用 query() 方法构建一个查询。
Raw Queries正如 API 名字,rawQuery() 是最简单的解决方法。通过这个方法你就可以调用 SQL SELECT 语句。例如:
Cursor c=db.rawQuery("SELECT name FROM sqPte_master WHERE type='table' AND name='mytable'", nPl);
在上面例子中,我们查询 SQPte 系统表(sqPte_master)检查 table 表是否存在。返回值是一个 cursor 对象,这个对象的方法可以迭代查询结果。如果查询是动态的,使用这个方法就会非常复杂。例如,当你需要查询的列在程序编译的时候不能确定,这时候使用 query() 方法会方便很多。
RegPar Queriesquery() 方法用 SELECT 语句段构建查询。SELECT 语句内容作为 query() 方法的参数,比如:要查询的表名,要获取的字段名,WHERE 条件,包含可选的位置参数,去替代 WHERE 条件中位置参数的值,GROUP BY 条件,HAVING 条件。除了表名,其他参数可以是 nPl。所以,以前的代码段可以可写成:
String[] cPumns={"ID", "inventory"};
String[] parms={"snicklefritz"};
Cursor resPt=db.query("widgets", cPumns, "name=?",parms, nPl, nPl, nPl);
使用游标不管你如何执行查询,都会返回一个 Cursor,这是 Android 的 SQPte 数据库游标,使用游标,你可以:通过使用 getCount() 方法得到结果集中有多少记录;通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历所有记录;通过 getCPumnNames() 得到字段名;通过 getCPumnIndex() 转换成字段号;通过 getString(),getInt() 等方法得到给定字段当前记录的值;通过 requery() 方法重新执行查询得到游标;通过 close() 方法释放游标资源;例如,下面代码遍历 mytable 表
Cursor resPt=db.rawQuery("SELECT ID, name, inventory FROM mytable");
resPt.moveToFirst();
while (!resPt.isAfterLast()) {
int id=resPt.getInt(0);
String name=resPt.getString(1);
int inventory=resPt.getInt(2);
// do something usefP with these
resPt.moveToNext();
}
resPt.close();
在 Android 中使用 SQPte 数据库管理工具
在其他数据库上作开发,一般都使用工具来检查和处理数据库的内容,而不是仅仅使用数据库的 API。使用 Android 模拟器,有两种可供选择的方法来管理数据库。首先,模拟器绑定了 sqPte3 控制台程序,可以使用 adb shell 命令来调用他。只要你进入了模拟器的 shell,在数据库的路径执行 sqPte3 命令就可以了。数据库文件一般存放
在:/data/data/your.app.package/databases/your-db-name如果你喜欢使用更友好的工具,你可以把数据库拷贝到你的开发机上,使用 SQPte-aware 客户端来操作它。这样的话,你在一个数据库的拷贝上操作,如果你想要你的修改能反映到设备上,你需要把数据库备份回去。把数据库从设备上考出来,你可以使用 adb pPl 命令(或者在 IDE 上做相应操作)。存储一个修改过的数据库到设备上,使用 adb push 命令。一个最方便的 SQPte 客户端是 FireFox SQPte Manager 扩展,它可以跨所有平台使用。
结束语
如果你想要开发 Android 应用程序,一定需要在 Android 上存储数据,使用 SQPte 数据库是一种非常好的选择。本文介绍了如何在 Android 应用程序中使用 SQPte 数据库 ,主要介绍了在 Android 应用程序中使用 SQPte 创建数据库和表、添加数据、更新和检索数据,还介绍了比较常用的 SQPte 管理工具,通过阅读本文,你可以在 Android 中轻松操作 SQPte 数据库。
#p#副标题#e#



android中,什么是presenter?
在Android开发中,Presenter是一种设计模式中的组件,主要用于实现业务逻辑层与视图层的交互和协调。它作为视图层和数据层之间的中介,负责处理用户交互和业务逻辑。详细解释:1. 基本角色和功能:在MVC架构中,Presenter类似于Controller的角色。它接收来自View的请求,处理这些请求并更新Model,同时确保View的...

安卓开发需要学哪些
1. 编程语言:Java是安卓开发的主要编程语言,因此需要掌握Java的基础知识和核心技术,包括数据类型、控制结构、面向对象编程等。同时还需要熟悉Android平台特定的Java扩展API和框架。另外Kotlin也是一个日渐流行的选择作为安卓开发语言,因此了解Kotlin也是加分项。2. Android开发基础:了解Android系统的架构和组件...

Android开发——HOOK技术【解析】
Android 开发中,Hook 技术犹如一个灵活的「钩子」,能够在事件传递的流程中插入自定义处理。系统通过事件分发机制运作,而 Hook 则能监控并影响这个流程。API Hook 技术允许我们改变 API 的执行路径,尽管Android的沙箱机制限制了直接修改其他程序,但Hook技术为我们提供了解决方案。Hook的应用广泛,开发者可...

android开发都需要使用什么语言?
Android开发主要使用Java和Kotlin语言。Android操作系统是基于Java语言开发的,因此Java是Android开发中最常用的编程语言。从Android Studio的开发环境到API的开发,大部分工作都是使用Java语言完成的。开发者可以使用Java进行应用程序开发,包括图形界面设计、数据处理、网络通信等。此外,Java的跨平台特性也使得开...

Android软件开发工具包是(安卓开发工具包)
在Android开发中,什么是SDK和AVDManager?SDK:(softwaredevelopmentkit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。\\x0d\\x0a因此,AndroidSDK指的是Android专属的软件开发工具包。\\x0d\\x0a下载好AndroidSDK后,开始安装,...

Android —— 自定义View中,你不得不知的知识点
自定义View是Android开发中的关键技能。通过自定义控件,开发者能够实现独特且满足特定需求的用户界面。在深入探讨自定义View的知识点之前,首先需要了解Android的控件架构。Android的控件分为View和ViewGroup两大类。ViewGroup可以包含多个View,负责管理它们的绘制、测量和交互。View树的构建是通过深度遍历的方法...

android开发之UI
Android开发中的UI设计是关键部分,本文将带你了解布局、常用的单位以及一个计算器UI的实例,基于Android 4.1开发工具。首先,我们关注布局类型。线性布局是基础,通过LinearLayout实现,可通过orientation属性调整摆放方向,如垂直或水平。使用权重控制组件的平均分配或比例大小。例如,每个孩子宽度为0dp,权重为...

Android 开发中,有哪些坑需要注意
1. 为Activity声明系统配置变更事件 系统配置变更事件是指转屏,区域语言发生变化,屏幕尺寸发生变化等等,如果Activity没有声明处理这些事件,发生事件时,系统会把Activity杀掉然后重启,并尝试恢复状态,Activity有机会通过onSaveInstanceState()保存一些基本数据到Bundle中,然后此Bundle会在Activity的onCreate()...

谈谈android中的divider是个什么东东
Android中的Divider是一种用于分隔不同元素或内容的视觉元素。详细解释:1. Divider的基本定义 在Android开发中,Divider通常表现为一条细线,用于在不同列表项或视图元素之间创建清晰的分隔。这些分隔线可以增强用户界面的整洁性和可读性,帮助用户更好地理解和区分不同的数据块。Divider可以是垂直的也可以是...

学习Android的开发技术
界面开发是一种基本的技术,几乎所有的程序里面都需要用到。在Android开发中界面开发分为3种:1)使用xml文件布局 使用xml首先对于界面进行布局,然后在Activity里面进行引用是最常见的应用软件开发技术,这种方式使用的最大,需要学习的内容也最多。学习时需要熟悉:a)五种Layout布局 深刻理解五种布局组织...

果洛藏族自治州15374789818: 如何在android中调用数据库资源 -
闵底奥孚: android平台上的数据库,一般使用sqlite,sqlite属于轻量级数据库,占用空间小,效率高.在android中使用sqlite,只需要几个步骤.1. 打开数据库2. 使用游标读取数据库中数据 给你贴一段我的代码.SQLiteDatabase dbs; Cursor cursor1=null; ...

果洛藏族自治州15374789818: android开发 数据库的使用 -
闵底奥孚: SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, Python)都使用了 SQLite,SQLite 由以下几个组件组成:SQL 编译器、...

果洛藏族自治州15374789818: android开发中为什么使用sqlite数据库进行开发 -
闵底奥孚: sqllite属于轻量级的数据库,因为它足够小,可以放在android app中使用. 使用它用来存储数据的,相比其他数据库,都需要在pc上配置环境 ,没法移植到app程序中.

果洛藏族自治州15374789818: android开发sqlite在android的程序里使用sql
闵底奥孚: android 数据库,当你创建了一个数据库,建了表,那么这个表的数据就会保存在手机里面,模拟器的话就在模拟器的内存里.下次打开这个软件数据还是会在,即使重新...

果洛藏族自治州15374789818: android怎么操作sqlite数据库 -
闵底奥孚: 在Android中操作SQLite数据库使用SQLiteDatabase类,使用该类可以对数据库进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作.需要重点掌握的是execSQL()和rawQuery()方法.其中 execSQL()方法可...

果洛藏族自治州15374789818: android 怎么调用数据库方法 -
闵底奥孚: SQLite也支持SQL标准类型,VARCHAR、CHAR、BIGINT等. 创建数据库 Android 不自动提供数据库.在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据.Android 提供了 SQLiteOpenHelper 帮助你创建...

果洛藏族自治州15374789818: Android开发怎么查看和管理sqlite数据库 -
闵底奥孚: 打开android项目的调试模式,然后找到显示DDMS选择DDMS 切换到DDMS,显示File Explorer窗口,找到/data/data/ 啰嗦一句,你可能在你自己的eclipse没找到,File Explorer ,如果找不到的话,就去网上下载,"easyExplorer",放在...

果洛藏族自治州15374789818: 如何在Android应用中使用已有的SQLite数据库 -
闵底奥孚: 其主要思路是:1. 把数据库分解成几个asset文件.2. 当需要打开数据库时,如果数据库不存在,就把那几个asset文件重新合并成一个数据库文件.3. 如果数据库的版本改变了,就在onUpgrade()方法中把数据库文件删除掉.下面是代码://...

果洛藏族自治州15374789818: android上如何使用sqlite数据库 -
闵底奥孚: 1.打开数据库Context类的openDatabase可以打开一个已经存在的数据库,如果数据库不存在,将会抛出FileNotFoundException异常.可以通过Context类的createDatabase函数建立一个新的数据库.通过调用SQLiteDatabase 的execSQL方法,...

果洛藏族自治州15374789818: android怎么连接sqlite数据库?. -
闵底奥孚: 这种方式通常连接一个外部的数据库,第一个参数就是数据库文件,这个数据库不是当前项目中生成的,通常放在项目的Assets目录下,当然也可以在手机内,如上面参数那个目录,前提是那个文件存在且你的程序有访问权限.另一种使用数据...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网