/********************************************************************************************
* author:conowen@大钟
* E-mail:conowen@hotmail.com
* http://blog.csdn.net/conowen
* 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。
********************************************************************************************/
1、SQLite简单介绍
SQ为Structured Query (结构化查询)的缩写,Lite表示轻量级。SQLite是一款开源的关系型数据库。几乎可以支持所有现代编程语言和各种操作系统,SQLite的最新版本为SQLite 3。
SQLite的特性:
1. ACID事务
2. 零配置 – 无需安装和管理配置
3. 储存在单一磁盘文件中的一个完整的数据库
4. 数据库文件可以在不同字节顺序的机器间自由的共享
5. 支持数据库大小至2TB
6. 足够小, 大致3万行C代码, 250K , 运行时占用内存大概几百K。
7. 比一些流行的数据库在大部分普通数据库操作要快
8. 简单, 轻松的API
9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定
10. 良好注释的源代码, 并且有着90%以上的测试覆盖率
11. 独立: 没有额外依赖
12. Source完全的Open, 你可以用于任何用途, 包括出售它
13. 支持多种开发语言,C, PHP, Perl, Java, ASP.NET,Python
2、SQLite数据库相关操作方法
对SQLite数据库的操作一般包括:创建一个数据库,打开数据库,关闭数据库,删除数据库。
2.1、创建和打开数据库的方法:
使用openOrCreateDatabase()方法来创建,若数据库不存在,则会创建新数据库,若存在,则打开数据库。和openFileOutput(String filename,mode)的使用差不多,请参看这篇博文,http://blog.csdn.net/conowen/article/details/7296121
openOrCreateDatabase()方法的返回值为一个SQLiteDatabase对象。详细可以参看以下openOrCreateDatabase()方法的官方说明
Open a new private SQLiteDatabase associated with this Context's application package. Create the database file if it doesn't exist.
Parameters
name
The name (unique in the application package) of the database. |
mode
Operating mode. Use 0 or MODE_PRIVATE for the default operation,MODE_WORLD_READABLE
andMODE_WORLD_WRITEABLE to control permissions. |
factory
An optional factory class that is called to instantiate a cursor when query is called. |
Returns
- The contents of a newly created database with the given name.
第一个参数————为数据库的名字,string类型。
第二个参数————为常量,如下所示
常量 含义
MODE_PRIVATE
默认模式,值为0,文件只可以被调用该方法的应用程序访问
MODE_WORLD_READABLE
所有的应用程序都具有对该文件读的权限。
MODE_WORLD_WRITEABLE
所有的应用程序都具有对该文件写的权限。
第三个参数————当query方法被调用时,用来实例化cursor,通常为null
2.2、关闭SQLite数据库
对数据库操作完毕之后,就要关闭数据库,否则会抛出SQLiteException异常。关闭数据库只需调用成SQLiteDatabase对象的.close()方法即可。
2.3、删除数据库
直接调用deleteDatebase()方法即可,如:
3、SQLite数据库中(Table )“表”的操作方法
首先要明确一点的是,一个数据库可以有很多表,一个表中包含很多条数据,也就是说,在数据库里面保存数据其实是保存在Table (表)里面的。对已经存在和已经创建的数据库操作一般包括:创建表,往表添加数据,从表中删除数据,修改表中的数据,查询表中的数据,删除已存在的表。
3.1创建一个表
通过调用数据库的execSQL
(String sql)方法可以创建一个table(表),关于execSQL(String sql)方法的详细可以参看以下的官方说明。
public void execSQL(String sql)
Execute a single SQL statement that is NOT a SELECT or any other SQL statement that returns data.
It has no means to return any data (such as the number of affected rows). Instead, you're encouraged to useinsert(String,
String, ContentValues)
,update(String, ContentValues, String,
String[])
, et al, when possible.
When using enableWriteAheadLogging()
, journal_mode is automatically managed by this class. So, do not set journal_mode using "PRAGMA
journal_mode'" statement if your app is using enableWriteAheadLogging()
Parameters
sql
the SQL statement to be executed. Multiple statements separated by semicolons are not supported. |
事实上,execSQL (String sql)方法的参数“sql“是SQL语句,为字符串类型。如
关于SQL语句可参看相关SQL的编程资料。
另外通过execSQL()方法,还可以实现向表中“插入”数据,“删除”数据。
同样是通过不同的SQL语句实现的。
另外:读取表中数据也可以用rawQuery();方法来读取。
Runs the provided SQL and returns a Cursor
over the result set.
Parameters
sql
the SQL query. The SQL string must not be ; terminated |
selectionArgs
You may include ?s in where clause in the query, which will be replaced by the values from selectionArgs. The values will be bound as Strings. |
Returns
- A
Cursor
object, which is positioned before the first entry. Note thatCursor
s are not synchronized,
see the documentation for more details.
虽然db.execSQL(sql);方法也可以实现insert和delete操作,另外db.rawQuery(sql, selectionArgs);也可以查询表中的某一条数据,但是由于涉及到标准SQL语句,所以一般来说,除了新建table是用execSQL(sql)方法和3.6点的删除一个table,其他的如insert,delete,query操作还是建议使用以下方法。
3.2、向表中插入一条数据
往数据库的table插入数据,可以直接调用db.insert()方法插入,但是insert()方法中的第三个参数是一个ContentValues的,其实也就是一个map,包含了一些键值对(key-value)。通过contentValues的put方法,可以把键值对放进contentValues里面,然后再通过db.insert()方法插到数据库的table中。
public long insert(String table,String
nullColumnHack,
ContentValues values)
Convenience method for inserting a row into the database.
Parameters
table
the table to insert the row into |
nullColumnHack
optional; may be null . SQL doesn't allow inserting a completely empty row without naming at least one column name. If your providedvalues is empty, no column names are known and an empty row can't be inserted. If not set to null,
thenullColumnHack parameter provides the name of nullable column name to explicitly insert a NULL into in the case where yourvalues is empty. |
values
this map contains the initial column values for the row. The keys should be the column names and the values the column values |
Returns
- the row ID of the newly inserted row, or -1 if an error occurred
insert的第一个参数是table的名字,第二个参数一般为null,第三个参数是contentValues。若成功insert,就返回新插入row的id,不成功返回-1。
3.3、删除table中的一条数据
直接调用数据库的db.delete()方法。
public intdelete(String table,String
whereClause,String[] whereArgs)
Convenience method for deleting rows in the database.
Parameters
table
the table to delete from |
whereClause
the optional WHERE clause to apply when deleting. Passing null will delete all rows. |
Returns
- the number of rows affected if a whereClause is passed in, 0 otherwise. To remove all rows and get a count pass "1" as the whereClause.
第一个参数————table名
第二个参数————删除的条件,为字符串。如果为null,则所有行都将删除。
第三个参数————字符串数组,和whereClause配合使用。
用法一、如果whereClause的条件已经直接给出,如“name= “ + num,num是传入的参数。则whereArgs可设为null。
用法二、当在whereClause中包含”?”时,则whereArgs这个数组中的值将依次替换whereClause中出现的”?”
3.4、修改表中数据
调用db.update()方法
Convenience method for updating rows in the database.
Parameters
table
the table to update in |
values
a map from column names to new column values. null is a valid value that will be translated to NULL. |
whereClause
the optional WHERE clause to apply when updating. Passing null will update all rows. |
Returns
- the number of rows affected
update()的是个参数请参看上面几个方法的说明。
3.5、查询表中的数据
调用db.query()方法。
Query the given table, returning a Cursor
over the result set.
Parameters
table
The table name to compile the query against. |
columns
A list of which columns to return. Passing null will return all columns, which is discouraged to prevent reading data from storage that isn't going to be used. |
selection
A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given table. |
selectionArgs
You may include ?s in selection, which will be replaced by the values from selectionArgs, in order that they appear in the selection. The values will be bound as Strings. |
groupBy
A filter declaring how to group rows, formatted as an SQL GROUP BY clause (excluding the GROUP BY itself). Passing null will cause the rows to not be grouped. |
having
A filter declare which row groups to include in the cursor, if row grouping is being used, formatted as an SQL HAVING clause (excluding the HAVING itself). Passing null will cause all row groups to be included, and is required when row grouping is not being
used. |
orderBy
How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered. |
limit
Limits the number of rows returned by the query, formatted as LIMIT clause. Passing null denotes no LIMIT clause. |
Returns
- A
Cursor
object, which is positioned before the first entry. Note thatCursor
s are not synchronized,
see the documentation for more details.
参数说明:
table————要查询数据的表名
columns————要返回列的列名数组
selection————可选的where子句 ,如果为null,将会返回所有的行
selectionArgs————当在selection中包含”?”时,如果selectionArgs的值不为null,则这个数组中的值将依次替换selection中出现的”?”
groupBy————可选的group by子句,如果其值为null,将不会对行进行分组
having————可选的having子句,如果其值为null,将会包含所有的分组
orderBy————可选的order by子句,如果其值为null,将会使用默认的排序规则
limit————可选的limit子句,如果其值为null,将不会包含limit子句
返回值类型为Cursor(游标),Cursor的操作示意图
然后通过调用Cursor的相关方法来操作查询到的数据,关于Cursor的使用方法可以参看官方的说明文档,下面列出一些常用的方法:
3.6、删除一个table
通过db.execSQL(sql)方法实现,参数sql是SQL标准语句
关于SQLite的具体实现例子,可以点击以下的链接,参看另一篇博文
点击打开链接
分享到:
相关推荐
总之,这份"Android开发笔记——模拟器、应用教程"将引导你全面了解Android开发的核心技术和实践方法,无论你是初学者还是经验丰富的开发者,都可以从中受益。通过学习和掌握这些知识点,你将能够创建出高质量、适应...
《Android学习笔记》 在移动应用开发领域,Android操作系统占据着重要的地位,为开发者提供了丰富的API和工具,使得创建各种应用程序变得可能。本压缩包文件包含了一位学习者从第一天到第五天,以及一个特定项目...
### Android学习笔记(入门必看) #### 一、Android简介 **Android** 是一个开源的操作系统,主要用于智能手机和平板电脑等移动设备。它由Google公司维护,并基于Linux内核进行开发。Android平台不仅包括操作系统...
《安卓Android源码——NotePad便签》 在Android操作系统中,NotePad是经典的示例应用,用于展示基本的数据库操作、UI设计以及事件处理等核心功能。这个压缩包文件包含的就是NotePad应用的源代码,是学习Android开发...
"Android学习笔记"是一个集合了从网络上收集并整理的学习资料,旨在帮助开发者或者对Android有兴趣的人深入理解和掌握这个平台。 Android开发教程通常涵盖以下几个核心知识点: 1. **环境配置**:开始Android开发...
首先,源码中的"源码说明.txt"可能包含关于项目背景、功能介绍和实现方法的概述,它是理解整个项目的关键。在Android应用开发中,通常会遵循MVC(模型-视图-控制器)或MVVM(模型-视图-ViewModel)架构模式。备忘录...
### Android学习笔记 #### 一、Android的体系结构与历史 **1. Android体系结构** Android的操作系统架构可以被划分为四个主要层次: - **Linux内核层**:这一层负责提供硬件驱动(如显示屏、摄像头等)、底层...
对于每个练习阶段,开发者可能需要对照这些解决方案,逐步理解如何将UI与数据库操作关联起来,实现笔记的添加、显示、编辑和删除功能。例如,当用户点击“保存”按钮时,应用会获取EditText中的文本,将其保存到...
5. **Android生命周期**:在源码中,可以看到各个组件(如Activity、Fragment)的生命周期方法,如`onCreate()`、`onStart()`、`onResume()`等,理解这些方法的执行顺序对于优化应用性能至关重要。 6. **异步处理与...
这个压缩包文件“安卓Android源码——适合新手的简单记事本项目.zip”是一个专为初学者设计的Android应用项目,旨在帮助他们理解和学习Android应用开发的基础知识。项目中的源码是一个简单的记事本应用程序,它能...
《安卓Android源码深度探索——以Mi_Notes为例》 在深入探讨安卓Android源码之前,我们首先要明白,源码是软件开发的核心,它揭示了应用程序的内部运作机制。对于Android系统,开源特性使得开发者能够深入理解其...
在本压缩包“Android源码——小米系统之便签源码.zip”中,我们主要探讨的是小米手机系统中便签应用的源代码。这个源代码分析对于深入理解Android开发,尤其是定制系统应用的开发有着重要的价值。以下是关于Android...
标题中的“2011.09.23——— android sample之Notepad(context menu)”表明这是一个关于Android应用开发的示例项目,具体是针对Notepad应用的上下文菜单(Context Menu)功能的实践。在Android开发中,上下文菜单是...
《Android学习笔记——Java编程基础与实战应用》 在Android开发领域,Java语言扮演着至关重要的角色。Android Studio是Google官方推荐的开发环境,而它主要支持的就是Java语言。本篇将深入探讨Java编程基础以及如何...
【Android小应用程序——深入探索NotePad】 Android小应用程序是Android操作系统中的一种轻量级应用,它们通常具有特定的功能,如记事本应用NotePad。NotePad是一个基础的、用于记录和管理简单文本笔记的应用,它是...
在安卓(Android)平台上开发应用时,理解源码和基本的文件操作是非常重要的技能。这里我们探讨的是一个初级记事本程序,它直接对文件进行读写操作。这个程序是学习安卓应用程序开发的一个良好起点,因为它涉及到...
《Android日记系统源码解析——数据库基础操作》 在Android应用开发中,数据持久化是不可或缺的一部分,而数据库则是实现这一目标的重要工具。本资源"android日记系统源码(数据库的基本操作).rar"提供了这样一个...
【Android学习笔记】 Android,由谷歌公司在2008年推出,是一款基于Linux内核的开源移动操作系统。它主要用于智能手机和平板电脑,但其影响力已扩展到智能电视、汽车、可穿戴设备等多个领域。Android系统的主要编程...