数据库文件位于/data/data/你的程序的包名/databases/中,下图是一个例子
SQLite是Android平台软件开发中会经常用到的数据库产品,作为一款轻型数据库,SQLite的设计目标就是是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够。下面我们一起来看看针对Android平台的SQlite 3的使用。
以下概念都是在Android平台的SQlite限制下的理解:
数据库基础概念
◆SQlite 通过文件来保存数据库,一个文件就是一个数据库。
◆数据库里又包含数个表格;
◆每个表格里面包含了多个记录;
◆每个记录由多个字段组成;
◆每个字段都有其对应的值;
◆每个值都可以指定类型。
数据库名称即文件名;表格有自己的名称;记录没有名称;每个字段都有名称。在SQlite中,记录没有顺序的概念,不存在第一、第二此类的概念;只能通过查询来获取满足条件的记录。我们通过执行SQL指令来操作数据库。
Android平台下数据库相关类
◆SQLiteOpenHelper 抽象类:通过从此类继承实现用户类,来提供数据库打开、关闭等操作函数。
◆SQLiteDatabase 数据库访问类:执行对数据库的插入记录、查询记录等操作。
◆SQLiteCursor 查询结构操作类:用来访问查询结果中的记录。
1.创建和打开数据库
在Android 中创建和打开一个数据库都可以使用openOrCreateDatabase 方法来实现,因为它会自动去检测是否存在这个数据库,如果存在则打开,不过不存在则创建一个数据库;创建成功则返回一个 SQLiteDatabase对象,否则抛出异常FileNotFoundException。下面我们来创建一个名 为"Examples_06_05.db"的数据库,并返回一个SQLiteDatabase对象 mSQLiteDatabase。
SQLiteDataBase mSQLiteDataBase;
1. public class DataBaseHelper {
DataBaseHelper (Context context) {
super(context, DB_NAME, null, DB_VERSION);//null( CursorFactory factory)
}
}
2. DataBaseHelper mOpenHalper= new DataBaseHelper(this);
3. 1. mSQLiteDatabase = mOpenHelper.openOrCreateDatabase("Example_06_05.db", MODE_PRIVATE, null);
//openOrCreateDatabase(String name, int mode,CursorFactory Factory)
2.创建表
一个数据库中可以包含多个表,我们的每一条数据都保存在一个指定的表中,要创建表可以通过execSQL 方法来执行一条SQL语句。execSQL能够执行大部分的SQL语句,下面我们来创建一个名为table1 且包含3个字段的表。 具体代码如下:
1. 1. String CREATE_TABLE = "CREATE TABLE table1 (_id INTEGER PRIMARY KEY, num INTEGER, data TEXT)";
2. 2. mSQLiteDatabase.execSQL(CREATE_TABLE);
3. //或者利用StringBuilder
2. StringBuilder sql = new StringBuilder();
3. sql.append("CREATE TABLE ");
4. sql.append(TBL_NAME);
5. sql.append(" (");
6. sql.append(FIELD_ID + " TEXT PRIMARY KEY NOT NULL, ");
7. sql.append(FIELD_NAME + " TEXT, ");
8. sql.append(FIELD_AGE + " INTEGER");
9. sql.append(");");
10. db.execSQL(sql.toString());
3.向表中添加一条数据
可以使用insert 方法来添加数据,但是 insert 方法要求把数据都打包到 ContentValues 中, ContentValues 其实就是一个Map, key值是字段名称, Value值是字段的值。通过 ContentValues 的 put 方法就可以把数据放到ContentValues中,然后插入到表中去。具体实现如下:
Java代码
1. 1. ContentValues cv = new ContentValues();
2. 2. cv.put(TABLE_NUM, 1);
3. 3. cv.put(TABLE_DATA, "测试数据");
4. 4. mSQLiteDatabase.insert(TABLE_NAME, null, cv);
5. 5.
6. 6. //这样同样可以使用execSQL方法来执行一条“插入”的SQL语句,代码如下:
7. 7. String INSERT_DATA = "INSERT INTO table1 (_id, num, data) values (1, 1, '通过SQL语句插入')" ;
8. 8. mSQLiteDatabase.execSQL(INSERT_DATA);
4.从表中删除数据
要删除数据可以使用delete 方法,下面我们删除字段 "_id" 等于1的数据,具体代码如下:
1. 1. mSQLiteDatabase.delete("Examples_06_05.db", " where_id="+0, null);
2. 2. 通过 execSQL方法执行SQL语句删除数据如下:
3. 3. String DELETE_DATA = "DELETE FROM table1 WHERE _id=1";
4. 4. mSQLiteDatabase.execSQL(DELETE_DATA);
5.修改表中的数据
如果添加了数据后发现数据有误,这时需要修改这个数据,可以使用updata方法来更新一条数据。下面我们来修改 "num" 值为0的数据,具体代码如下:
1. 1. ContentValues cv = new ContentValues();
2. 2. cv.put(TABLE_NUM, 3);
3. 3. cv.put(TABLE_DATA, "修改后的数据");
4. 4. mSQLiteDatabase.update("table1" cv, "num " + "=" + Integer.toString(0), null);
6.关闭数据库
关闭数据库很重要,也是大家经常容易忘记的。关闭的方法很简单,直接使用SQLiteDatabase 的 close 方法。具体代码如下:
1. mSQLiteDatabase.close();
7.删除指定表
这里我们使用execSQL方法来实现,具体代码如下:
1. mSQLiteDatabase.execSQL("DROP TABLE table1");
8.删除数据库
要删除一个数据库,直接使用deleteDatabase 方法即可,具体代码如下:
1. 1. this.deleteDatabase("Examples_06_05.db");
9.查询表中的某条数据
在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 返回当前行中指定的索引数据
下面我们就是用Cursor来查询数据库中的数据,具体代码如下:
1. 1. Cursor cur = mSQLiteDatabase.rawQuery("SELECT * FROM table", null);
2. 2. if( cur != null ){
3. 3. if( cur.moveToFirst() ){
4. 4. do{
5. 5. int numColumn = cur.getColumnIndex("num");
6. 6. int num = cur.getInt(numColumn);
7. 7. }while( cur.moveToNext());
8. 8. }
9. 9. }
10. //或这样实现
11. String[] col[] = new String[] {"stu_no","stu_name"}
12. Cursor cur = mSQLiteDatabase.query("student", col, null, null, null, null, null);
13. if( cur.moveToFirst() ){
14. while(cur.moveToNext()){
15. String name = cursor.getString(cur.getColumnIndex("name"));
16. System.out.println("query--->" + name);
17. }
}
最后在提醒大家一句: 使用SQLiteDatabase数据库要及时关闭(close), 否则可能会抛出SQLiteException异常。

SQLite是Android平台软件开发中会经常用到的数据库产品,作为一款轻型数据库,SQLite的设计目标就是是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够。下面我们一起来看看针对Android平台的SQlite 3的使用。
以下概念都是在Android平台的SQlite限制下的理解:
数据库基础概念
◆SQlite 通过文件来保存数据库,一个文件就是一个数据库。
◆数据库里又包含数个表格;
◆每个表格里面包含了多个记录;
◆每个记录由多个字段组成;
◆每个字段都有其对应的值;
◆每个值都可以指定类型。
数据库名称即文件名;表格有自己的名称;记录没有名称;每个字段都有名称。在SQlite中,记录没有顺序的概念,不存在第一、第二此类的概念;只能通过查询来获取满足条件的记录。我们通过执行SQL指令来操作数据库。
Android平台下数据库相关类
◆SQLiteOpenHelper 抽象类:通过从此类继承实现用户类,来提供数据库打开、关闭等操作函数。
◆SQLiteDatabase 数据库访问类:执行对数据库的插入记录、查询记录等操作。
◆SQLiteCursor 查询结构操作类:用来访问查询结果中的记录。
1.创建和打开数据库
在Android 中创建和打开一个数据库都可以使用openOrCreateDatabase 方法来实现,因为它会自动去检测是否存在这个数据库,如果存在则打开,不过不存在则创建一个数据库;创建成功则返回一个 SQLiteDatabase对象,否则抛出异常FileNotFoundException。下面我们来创建一个名 为"Examples_06_05.db"的数据库,并返回一个SQLiteDatabase对象 mSQLiteDatabase。
SQLiteDataBase mSQLiteDataBase;
1. public class DataBaseHelper {
DataBaseHelper (Context context) {
super(context, DB_NAME, null, DB_VERSION);//null( CursorFactory factory)
}
}
2. DataBaseHelper mOpenHalper= new DataBaseHelper(this);
3. 1. mSQLiteDatabase = mOpenHelper.openOrCreateDatabase("Example_06_05.db", MODE_PRIVATE, null);
//openOrCreateDatabase(String name, int mode,CursorFactory Factory)
2.创建表
一个数据库中可以包含多个表,我们的每一条数据都保存在一个指定的表中,要创建表可以通过execSQL 方法来执行一条SQL语句。execSQL能够执行大部分的SQL语句,下面我们来创建一个名为table1 且包含3个字段的表。 具体代码如下:
1. 1. String CREATE_TABLE = "CREATE TABLE table1 (_id INTEGER PRIMARY KEY, num INTEGER, data TEXT)";
2. 2. mSQLiteDatabase.execSQL(CREATE_TABLE);
3. //或者利用StringBuilder
2. StringBuilder sql = new StringBuilder();
3. sql.append("CREATE TABLE ");
4. sql.append(TBL_NAME);
5. sql.append(" (");
6. sql.append(FIELD_ID + " TEXT PRIMARY KEY NOT NULL, ");
7. sql.append(FIELD_NAME + " TEXT, ");
8. sql.append(FIELD_AGE + " INTEGER");
9. sql.append(");");
10. db.execSQL(sql.toString());
3.向表中添加一条数据
可以使用insert 方法来添加数据,但是 insert 方法要求把数据都打包到 ContentValues 中, ContentValues 其实就是一个Map, key值是字段名称, Value值是字段的值。通过 ContentValues 的 put 方法就可以把数据放到ContentValues中,然后插入到表中去。具体实现如下:
Java代码
1. 1. ContentValues cv = new ContentValues();
2. 2. cv.put(TABLE_NUM, 1);
3. 3. cv.put(TABLE_DATA, "测试数据");
4. 4. mSQLiteDatabase.insert(TABLE_NAME, null, cv);
5. 5.
6. 6. //这样同样可以使用execSQL方法来执行一条“插入”的SQL语句,代码如下:
7. 7. String INSERT_DATA = "INSERT INTO table1 (_id, num, data) values (1, 1, '通过SQL语句插入')" ;
8. 8. mSQLiteDatabase.execSQL(INSERT_DATA);
4.从表中删除数据
要删除数据可以使用delete 方法,下面我们删除字段 "_id" 等于1的数据,具体代码如下:
1. 1. mSQLiteDatabase.delete("Examples_06_05.db", " where_id="+0, null);
2. 2. 通过 execSQL方法执行SQL语句删除数据如下:
3. 3. String DELETE_DATA = "DELETE FROM table1 WHERE _id=1";
4. 4. mSQLiteDatabase.execSQL(DELETE_DATA);
5.修改表中的数据
如果添加了数据后发现数据有误,这时需要修改这个数据,可以使用updata方法来更新一条数据。下面我们来修改 "num" 值为0的数据,具体代码如下:
1. 1. ContentValues cv = new ContentValues();
2. 2. cv.put(TABLE_NUM, 3);
3. 3. cv.put(TABLE_DATA, "修改后的数据");
4. 4. mSQLiteDatabase.update("table1" cv, "num " + "=" + Integer.toString(0), null);
6.关闭数据库
关闭数据库很重要,也是大家经常容易忘记的。关闭的方法很简单,直接使用SQLiteDatabase 的 close 方法。具体代码如下:
1. mSQLiteDatabase.close();
7.删除指定表
这里我们使用execSQL方法来实现,具体代码如下:
1. mSQLiteDatabase.execSQL("DROP TABLE table1");
8.删除数据库
要删除一个数据库,直接使用deleteDatabase 方法即可,具体代码如下:
1. 1. this.deleteDatabase("Examples_06_05.db");
9.查询表中的某条数据
在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 返回当前行中指定的索引数据
下面我们就是用Cursor来查询数据库中的数据,具体代码如下:
1. 1. Cursor cur = mSQLiteDatabase.rawQuery("SELECT * FROM table", null);
2. 2. if( cur != null ){
3. 3. if( cur.moveToFirst() ){
4. 4. do{
5. 5. int numColumn = cur.getColumnIndex("num");
6. 6. int num = cur.getInt(numColumn);
7. 7. }while( cur.moveToNext());
8. 8. }
9. 9. }
10. //或这样实现
11. String[] col[] = new String[] {"stu_no","stu_name"}
12. Cursor cur = mSQLiteDatabase.query("student", col, null, null, null, null, null);
13. if( cur.moveToFirst() ){
14. while(cur.moveToNext()){
15. String name = cursor.getString(cur.getColumnIndex("name"));
16. System.out.println("query--->" + name);
17. }
}
最后在提醒大家一句: 使用SQLiteDatabase数据库要及时关闭(close), 否则可能会抛出SQLiteException异常。
发表评论
-
startActivityForResult 简介
2011-03-29 15:55 1284依次打开Activity A1--A2--A3--A4 这时 ... -
startActivityForResult
2011-03-29 15:49 1146startActivityForResult 方法-- ... -
史上最全的Android的Tab与TabHost讲解
2011-03-28 11:22 1591Tab与TabHost 这就是Tab,而盛放Tab的 ... -
Android对话框
2011-03-25 11:21 1125Android 对话框(Dialog)大全 ... -
PreferenceActivity详解
2011-03-25 11:15 1442为了引入这个概率 首先从需求说起 即:现有某Activity专 ... -
TCP/UDP/HTTP
2011-03-25 11:09 1125先来一个讲TCP、UDP和HTTP ... -
9png
2011-03-25 11:08 1914今天学习了用9png图来优化横屏竖屏的UI,使用sdk自带的工 ... -
Notification
2011-03-25 11:07 939Android系统的状态栏(Status Bar)中有一个创新 ... -
一些技巧
2011-03-25 11:03 7871:查看是否有存储卡插入 String status=Envi ... -
布局像素单位
2011-03-25 11:03 827Android的layout文件中有时候可能会指定具体的单位, ... -
使用ActivityGroup来切换Activity和Layout
2011-03-25 11:02 1135在一个主界面中做Activity切换一般都会用TabActiv ... -
activitygroup
2011-03-25 11:01 1730说说tabhost和activitygroup 最近 ... -
线程
2011-03-25 11:01 1014今天在论坛上看到一些关于线程的帖子,我觉得与我理解的有些差异, ... -
类级框架
2011-03-25 11:00 744类集框架:Collection,Map,Iterator,En ... -
Intent打电话
2011-03-25 11:00 1217intent英文意思是意图,pending表示即将发生或来临的 ... -
Intent Uri
2011-03-25 10:59 1068进入联系人页面 1.Intent intent = new I ... -
Service
2011-03-25 10:59 940一、Service的概念 Service是Android程序中 ... -
Broadcast Receiver
2011-03-25 10:56 1948一、Broadcast Receiver简介 Android中 ... -
ContentProvider MIME类型
2011-03-25 10:55 1238Android程序的主要4部分 ... -
ContentProvider-1查询
2011-03-25 10:55 1237今天看了android的官方文档中ContentProvide ...
相关推荐
现在,我们可以在项目中编写代码来操纵SQLite3数据库。CppSQLite3库提供了一系列的类,如`sqlite3_db_connection`代表数据库连接,`sqlite3_statement`表示SQL语句。以下是一个简单的示例: ```cpp #include int ...
sqlite实用程序 Python CLI实用程序和库,用于处理SQLite数据库。 一些功能亮点 (或 )直接传递到新SQLite数据库文件中,并使用适当的模式自动创建表 针对数据库表,并针对它们运行搜索查询(按相关性排序) ...
图形用户界面使得它很容易分析和操纵sqlite3的数据库。 注意:SQLiteSpy是免费供个人和教育用途,SQLiteSpy主要特点: 1、数据库一览:树状显示所有的架构,包括表,列,索引和触发器在数据库中包含的项目。按F5...
从而让用户更容易探讨、分析和操纵sqlite3的数据库。 SQLiteSpy不会对系统性能造成压力,因为它运行在非常少的CPU和RAM上。它具有良好的响应时间和工作正常,而不会导致操作系统挂起,崩溃或弹出错误对话框。...
sqlitespy是一个快速和紧凑的GUI数据库管理员为sqlite 。它的内容sqlite3文件并...它的图形用户界面使得它很容易探讨,分析和操纵sqlite3数据库。sqlite学习地址https://www.runoob.com/sqlite/sqlite-tutorial.html
sqlitespy是一个快速和紧凑的数据库SQLite的GUI管理软件 。它的图形用户界面使得它很容易探讨,分析和操纵sqlite3数据库。
- **SQL支持**:SQLite支持大部分SQL标准,包括DML(数据操纵语言)、DDL(数据定义语言)和DQL(数据查询语言),并提供了一些特有的功能,如fts5(全文搜索)和虚拟表模块。 - **事务管理**:SQLite提供ACID...
Android的数据库存储方式—SQLite的使用方法,包括:SQLite用到了哪些SQL语法,如何使用数据库管理器操纵SQLite,如何使用数据库帮助器简化数据库操作等,以及如何利用SQLite改进登录页面的记住密码功能。 适用人群:...
SQLite支持SQL标准,包括数据定义语言(DDL)用于创建和修改表结构,数据操纵语言(DML)用于插入、更新和删除数据,以及数据查询语言(DQL)用于检索数据。此外,SQLite还提供了一些独特的功能,比如fts5(全文搜索...
3. **SQL语法**:SQLite支持标准SQL,包括DML(数据操纵语言)如INSERT, UPDATE, DELETE,DQL(数据查询语言)如SELECT,以及DDL(数据定义语言)如CREATE TABLE, DROP TABLE等。 4. **事务处理**:SQLite支持事务...
它的图形用户界面使得它很容易探讨,分析和操纵sqlite3的数据库。 注意:SQLiteSpy是免费供个人和教育用途,SQLiteSpy主要特点: 1、数据库一览?树状显示所有的架构,包括表,列,索引和触发器在数据库中包含的...
6. **SQL支持**:SQLite支持标准的SQL语法,包括数据定义语言(DDL)、数据操纵语言(DML)和数据查询语言(DQL)。你可以创建表、索引、视图,插入、更新、删除数据,以及执行复杂的查询。 7. **事务处理**:...
3. SQL语言:SQLite3完全支持SQL标准,包括数据定义语言(DDL,如CREATE TABLE)、数据操纵语言(DML,如INSERT、UPDATE、DELETE)和数据查询语言(DQL,如SELECT)。 4. 连接:`sqlite3.exe`命令行工具用于连接到...
它支持所有的SQL标准,包括数据定义语言(DDL)、数据操纵语言(DML)以及数据控制语言(DCL)。例如,你可以用它来创建表、插入数据、更新记录、删除记录、查询数据等。此外,sqlite3.exe还可以用于运行SQLite ...
2. 触发器:触发器是自动执行的SQL代码,当特定的DML(数据操纵语言)事件发生时,如INSERT、UPDATE或DELETE。 八、备份与恢复 SQLite提供了`ATTACH DATABASE`和`DETACH DATABASE`命令,用于附加和分离数据库。此外...
SQLite 3.7.8支持大部分标准SQL语法,如DDL(数据定义语言)、DML(数据操纵语言)和DQL(数据查询语言)。此外,还支持触发器、存储过程和视图等高级特性。 5. **事务处理** SQLite支持ACID(原子性、一致性、...
SQLite支持标准的SQL语法,包括数据定义语言(DDL)用于创建和修改数据库结构,数据操纵语言(DML)用于插入、更新和删除数据,以及数据查询语言(DQL)用于检索数据。手册中会详细解释这些语法和操作。 在SQLite中...
SQLite3提供了SQL语言的完整支持,包括数据定义语言(DDL)用于创建和修改表结构,数据操纵语言(DML)用于插入、更新和删除数据,以及数据查询语言(DQL)用于检索信息。 关于`SQLite3参考手册`,这是一个CHM...
SQLite3支持标准SQL语法,包括数据定义(CREATE TABLE)、数据操纵(INSERT、UPDATE、DELETE)和数据查询(SELECT)。它具有动态类型系统,支持NULL、INTEGER、REAL、TEXT和BLOB五种基本数据类型。 3. 数据库操作 ...
它支持SQL92标准,包括基本的DML(数据操纵语言)、DDL(数据定义语言)和DQL(数据查询语言)。此外,SQLite3还提供了一些高级特性,如事务处理、触发器、视图、自定义函数和虚拟表。 在C语言项目中使用SQLite3,...