什么是 SQLiteDatabase?
一个 SQLiteDatabase 的实例代表了一个SQLite 的数据库,通过SQLiteDatabase 实例的一些方法,我们可以执行SQL 语句,对数据库进行增、删、查、改的操作。需要注意的是,数据库对于一个应用来说是私有的,并且在一个应用当中,数据库的名字也是惟一的。
什么是 SQLiteOpenHelper ?
根据这名字,我们可以看出这个类是一个辅助类。这个类主要生成一个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase(),或者getReadableDatabase()方法的时候,如果当时没有数据,那么Android 系统就会自动生成一 个数据库。SQLiteOpenHelper 是一个抽象类,我们通常需要继承它,并且实现里边的3 个函数
什么是 ContentValues 类?
ContentValues 类和Hashmap/Hashtable 比较类似,它也是负责存储一些名值对,但是它存储的名值对当中的名是一个String 类型,而值都是基本类型。
什么是 Cursor ?
Cursor 在Android 当中是一个非常有用的接口,通过Cursor 我们可以对从数据库查询出来的结果集进行随 机的读写访问。
SQLiteDatabase类介绍:
SQLiteDatabase类为我们提供了很多种方法;对于添加、更新和删除来说,我们都可以使用
1 db.executeSQL(String sql);
2 db.executeSQL(String sql, Object[] bindArgs);//sql语句中使用占位符,然后第二个参数是实际的参数集
除了统一的形式之外,他们还有各自的操作方法:
1 db.insert(String table, String nullColumnHack, ContentValues values);
2 db.update(String table, Contentvalues values, String whereClause, String whereArgs);
3 db.delete(String table, String whereClause, String whereArgs);
以上三个方法的第一个参数都是表示要操作的表名;insert中的第二个参数表示如果插入的数据每一列都为空的话,需要指定此行中某一列的名称,系统将此列设置为NULL,不至于出现错误;insert中的第三个参数是ContentValues类型的变量,是键值对组成的Map,key代表列名,value代表该列要插入的值;update的第二个参数也很类似,只不过它是更新该字段key为最新的value值,第三个参数whereClause表示WHERE表达式,比如“age > ? and age < ?”等,最后的whereArgs参数是占位符的实际参数值;delete方法的参数也是一样
下面给出demo:
打开数据库 //db = SQLiteDatabase.openOrCreateDatabase("/data/data/com.hh.firstdemo/userTb.db", null); db = this.openOrCreateDatabase("userTb.db", MODE_PRIVATE, null); str_sql = "select count(*) as c from sqlite_master where type='table' and name='" + TABLE_NAME + "';"; cursor = db.rawQuery(str_sql, null); if (cursor.moveToNext()) { int count = cursor.getInt(0); if (count < 1) { str_sql = "create table " + TABLE_NAME + " (id integer primary key,name text,age integer,gender text);"; Log.d("sql", str_sql); db.execSQL(str_sql); } } cursor.close();
数据的添加 String strName = txtName.getText().toString(); Integer intAge = Integer.parseInt(txtAge.getText().toString()); String strGender = txtGender.getText().toString();
1.使用insert方法 ContentValues cv = new ContentValues();//实例化一个ContentValues用来装载待插入的数据 cv.put("name", strName);//添加字段及内容 cv.put("age", intAge); cv.put("gender", strGender); db.insert(TABLE_NAME, null, cv);//执行插入操作
2.使用execSQL方式来实现 str_sql = "insert into " + TABLE_NAME + " (name,age,gender) values ('" + strName + "'," + intAge + ",'" + strGender + "');"; db.execSQL(str_sql);//执行SQL语句
数据的删除 String id = spinner.getSelectedItem().toString();
1.使用delete方法 String whereClause = "id=?";//删除的条件 String[] whereArgs = {id};//删除的条件参数 db.delete(TABLE_NAME, whereClause, whereArgs);//执行删除
2.使用execSQL方式来实现 str_sql = "delete from " + TABLE_NAME + " where id = " + id + ";";//删除操作的SQL语句 db.execSQL(str_sql);//执行删除操作 for (int i = 0; i < list.size(); i++) { if (list.get(i).equals(id)) { list.remove(i); adapter.notifyDataSetChanged(); } }
数据修改 String id = spinner.getSelectedItem().toString(); String strName = txtName.getText().toString(); Integer intAge = Integer.parseInt(txtAge.getText().toString()); String strGender = txtGender.getText().toString();
1.使用update方法 ContentValues cv = new ContentValues();//实例化ContentValues cv.put("name", strName);//添加要更改的字段及内容 cv.put("age", intAge); cv.put("gender", strGender); String whereChsuse = "id=?";//修改条件 String[] whereArgs = {id};//修改条件的参数 db.update(TABLE_NAME, cv, whereChsuse, whereArgs);//执行修改
2.使用execSQL方式来实现 str_sql = "update " + TABLE_NAME + " set name='" + strName + "'," +"age=" + intAge + ",gender='" + strGender + "' " +"where id =" + id + ";";//修改的SQL语句 db.execSQL(str_sql);//执行修改
数据查询
面来说说查询操作。查询操作相对于上面的几种操作要复杂些,因为我们经常要面对着各种各样的查询条件,所以系统也考虑到这种复杂性,为我们提供了较为丰富的查询形式:
db.rawQuery(String sql, String[] selectionArgs);
db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);
db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
上面几种都是常用的查询方法,第一种最为简单,将所有的SQL语句都组织到一个字符串中,使用占位符代替实际参数,selectionArgs就是占位符实际参数集;
各参数说明:
table:表名称
colums:表示要查询的列所有名称集
selection:表示WHERE之后的条件语句,可以使用占位符
selectionArgs:条件语句的参数数组
groupBy:指定分组的列名
having:指定分组条件,配合groupBy使用
orderBy:y指定排序的列名
limit:指定分页参数
distinct:指定“true”或“false”表示要不要过滤重复值
Cursor:返回值,相当于结果集ResultSet
最后,他们同时返回一个Cursor对象,代表数据集的游标,有点类似于JavaSE中的ResultSet。下面是Cursor对象的常用方法:
c.move(int offset); //以当前位置为参考,移动到指定行
c.moveToFirst(); //移动到第一行
c.moveToLast(); //移动到最后一行
c.moveToPosition(int position); //移动到指定行
c.moveToPrevious(); //移动到前一行
c.moveToNext(); //移动到下一行
c.isFirst(); //是否指向第一条
c.isLast(); //是否指向最后一条
c.isBeforeFirst(); //是否指向第一条之前
c.isAfterLast(); //是否指向最后一条之后
c.isNull(int columnIndex); //指定列是否为空(列基数为0)
c.isClosed(); //游标是否已关闭
c.getCount(); //总数据项数
c.getPosition(); //返回当前游标所指向的行数
c.getColumnIndex(String columnName);//返回某列名对应的列索引值
c.getString(int columnIndex); //返回当前行指定列的值
实现代码
String[] params = {12345,123456};
Cursor cursor = db.query("user",columns,"ID=?",params,null,null,null);//查询并获得游标
if(cursor.moveToFirst()){//判断游标是否为空
for(int i=0;i<cursor.getCount();i++){
cursor.move(i);//移动到指定记录
String username = cursor.getString(cursor.getColumnIndex("username");
String password = cursor.getString(cursor.getColumnIndex("password"));
}
}
通过rawQuery实现的带参数查询
Cursor result=db.rawQuery("SELECT ID, name, inventory FROM mytable");
//Cursor c = db.rawQuery("s name, inventory FROM mytable where ID=?",new Stirng[]{"123456"});
result.moveToFirst();
while (!result.isAfterLast()) {
int id=result.getInt(0);
String name=result.getString(1);
int inventory=result.getInt(2);
// do something useful with these
result.moveToNext();
}
result.close();
在上面的代码示例中,已经用到了这几个常用方法中的一些,关于更多的信息,大家可以参考官方文档中的说明。
最后当我们完成了对数据库的操作后,记得调用SQLiteDatabase的close()方法释放数据库连接,否则容易出现SQLiteException。
上面就是SQLite的基本应用,但在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法。
相关推荐
SQLite 数据库存储是 Android 中的一种数据存储方式,它可以存储大量结构化数据。SQLite 数据库存储的优点是可以存储大量数据,支持事务处理,缺点是相对复杂。SQLite 数据库存储的使用方法是通过 SQLiteOpenHelper ...
在Android开发中,SQLite是一个重要的组成部分,它是轻量级的数据库系统,被广泛用于本地数据存储。SQLite数据库在Android应用中扮演着至关重要的角色,它允许开发者创建、修改和管理数据库,无需用户干预,提供了...
在Android应用开发中,数据存储是至关重要的一个环节,它使得应用可以持久化地保存用户数据、设置等信息。SQLiteHelper是Android中用于操作SQLite数据库的一种常见方式,它基于SQLiteOpenHelper类,帮助开发者更加...
Android 手机 App 程序中 SQLite 数据存储应用是 Android 手机 App 程序开发中的一个重要组成部分。随着 IT 行业的高速发展,移动通信技术的更新速度日新月异。基于 Android 操作系统的智能通信设备逐步走入...
《数据存储之SQLite详解》 SQLite,作为一款轻量级的数据库引擎,广泛应用于移动设备、嵌入式系统以及各种应用程序中,它以其开源、无服务器、自包含、可移植等特性深受开发者喜爱。本文将深入探讨SQLite的核心概念...
在Android应用开发中,SQLite是一个重要的本地数据存储方式。SQLite是一个轻量级的、开源的、自包含的关系型数据库系统,它不需要单独的服务器进程,也不需要特定的权限管理。SQLite数据库可以被嵌入到各种应用程序...
Android数据存储SQLite - 事务操作
在Android开发中,SQLite是一个非常重要的数据存储工具。SQLite是一个轻量级的、关系型的数据库,它嵌入到Android系统中,为应用程序提供本地数据存储功能。SQLite数据库的优势在于其小巧、快速、稳定,无需单独的...
SQLite是一个轻量级的、嵌入式的关系数据库,它被广泛应用于Android系统中,为开发者提供了高效且灵活的数据存储解决方案。本节将深入探讨Android如何利用SQLite进行数据存储,并分享一些关键知识点。 首先,我们...
在Android应用开发中,本地数据存储是至关重要的,SQLite数据库作为一种轻量级的数据库系统,被广泛用于存储和管理应用程序中的结构化数据。本篇文章将深入探讨如何在Android中使用SQLite进行基本的增删改查操作,以...
SQLite是一个轻量级的嵌入式数据库,适用于移动设备,它能高效地存储和检索数据。 首先,你需要创建一个SQLite数据库。在Android Studio中,这通常通过实现SQLiteOpenHelper类来完成。在这个例子中,我们有一个名为...
在Android系统中,SQLite是一个内置的关系型数据库管理系统,用于存储应用程序的数据。SQLite支持SQL标准,具有轻量级、高效、可靠的特点,使得它成为移动应用数据管理的理想选择。本主题将深入探讨如何在Android中...
SQLite是一个轻量级的数据库,它是Android系统内置的数据库管理系统,特别适合于移动设备上的数据存储。本文将深入探讨Android中的SQLite数据存储,以及如何通过"日记本"应用的增删改查(CRUD)操作实例来实践这一...
在Android开发中,SQLite数据库是应用内数据存储的常用方式,尤其适合小规模的数据存储。SQLite是一个轻量级的、关系型的数据库,它不需要单独的服务器进程,且支持标准SQL语法,使得开发者能方便地进行数据操作。...
在Android应用开发中,SQLite是一个重要的本地数据存储解决方案。SQLite是一个轻量级的数据库系统,它内嵌在Android操作系统中,允许开发者以结构化方式存储和管理数据。本篇文章将深入探讨Android中的SQLite数据库...
在Android应用开发中,数据存储是一项至关重要的任务,SQLite数据库是Android系统内置的轻量级数据库,常用于存储结构化数据。本节我们将深入探讨SQLite的进阶使用,特别是关于查询方面的技巧。SQLite数据库提供了...
在Android系统中,SQLite是一个非常重要的组成部分,它是一个轻量级的、开源的、关系型数据库,被广泛用于存储和管理应用程序中的数据。这个压缩包文件"Android源码——数据库SQLite.zip"可能包含了关于Android中...
接下来,我们转向SQLite数据库,这是Android系统提供的一个关系型数据库,适合存储结构化数据,如用户账户、订单信息等。SQLite数据库操作主要包括以下部分: 1. 创建数据库:自定义SQLiteOpenHelper类,重写...
在Android应用开发中,数据存储是一项至关重要的任务,它使得应用程序能够持久化用户数据、配置信息等。SQLite作为Android系统内置的关系型数据库,是实现本地数据存储的首选方案。本篇将详细介绍如何在Android中...
本篇将详细讲解如何在Android应用中使用SQLite存储数据以及如何在SDCard(外部存储)上创建数据库。 首先,我们需要在Android项目中创建一个SQLite数据库。这通常通过实现`SQLiteOpenHelper`的子类来完成。`...