Android提供了创建和使用SQLite数据库的API(Application Programming Interface,应用程序编程接口)。

在Android系统中,主要由类SQLiteDatabase和SQLiteOpenHelper对SQLite数据库进行管理和操作。

(一)SQLiteOpenHelper类


SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。

因为是个抽象类,所以必须创建一个类来继承它,并实现两个抽象的方法onCreate()和onUpgrade()方法。

方法 说明

SQLiteOpenHelper(Context context, String name,

  SQLiteDatabase.CursorFactory factory, int version)

构造方法
abstract  void onCreate(SQLiteDatabase db) 创建数据库时调用

abstract  void onUpgrade(SQLiteDatabase db,

  int oldVersion, int newVersion)

升级数据库时调用
void onOpen(SQLiteDatabase db)  打开数据库时调用
SQLiteDatabase getReadableDatabase()
创建或打开数据库
SQLiteDatabase getWritableDatabase() 创建或打开一个读写数据库

下面是一个具体的例子:DatabaseHelper.java

private static class DatabaseHelper extends SQLiteOpenHelper {

    static final String DATABASE_NAME = "College.db";
static final int DATABASE_VERSION = 1;
static final String STUDENTS_TABLE_NAME = "students";
static final String CREATE_DB_TABLE =
" CREATE TABLE " + STUDENTS_TABLE_NAME +
" (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
" name TEXT NOT NULL, " +
" grade TEXT NOT NULL);"; DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
} @Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL(CREATE_DB_TABLE);
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + STUDENTS_TABLE_NAME);
onCreate(db);
}
}

(二)创建数据库


在Activity中创建数据库对象,可能是在onCreate()方法或事件中创建:

DatabaseHelper database = new DatabaseHelper(this);
SQLiteDatabase db = null;
db = database.getWritableDatabase();

首先实例一个SQLiteOpenHelper帮助类的对象,然后调用该对象的getWritableDatabase() 或 getReadableDatabase()方法 获得SQLiteDatabase 数据库对象。

另外2种创建的方法:

1、应用SQLiteDatabase对象openDatabase()方法及openOrCreateDatabase()方法创建数据库;

2、应用Activity继承于父类android.content.Context创建数据库的方法openOrCreateDatabase()来创建数据库。

 
此外

1、在DDMS中查看,College.db 生成在/data/data/xxxx(包名)/databases路径下。

2、删除数据库文件,应用android.content.Context类的deleteDatabase(String name)方法来删除指定的数据库。

(三)SQLiteDatabase 类


SQLiteDatabase 类的方法有很多,下面是最常用的几个。一般的数据操作,可以使用对应的方法,或者自己写需要的sql语句,再调用execSQL()方法执行。

方法 说明

openOrCreateDatabase(String path,

  SQLiteDatabase.CursorFactory  factory)

打开或创建数据库

openDatabase(String path,  SQLiteDatabase.CursorFactory  factory,int flags)

打开指定的数据库

insert(String table, String nullColumnHack, ContentValues  values)

新增一条记录

delete(String table,String whereClause, String[]  whereArgs)

删除一条记录

update(String table,ContentValues values, String whereClause,String[]  whereArgs)

修改记录

query(String table,String[] columns, String selection,

  String[]selectionArgs, String groupBy,String having, String orderBy)

查询一条记录
execSQL(String sql) 执行SQL语句
close() 关闭数据库

(四)增删改查


对数据记录的操作处理有两种方法:

  • 编写一条对记录进行增、删、改、查的SQL语句,通过exeSQL()方法来执行
  • 使用SQLiteDatabase对象的相应方法进行操作

数据添加

insert(String table, String nullColumnHack, ContentValues  values)方法
第1个参数table:增加记录的数据表;
第2个参数nullColumnHack:空列的默认值,通常为null;
第3个参数ContentValues:为ContentValues对象,其实就是一个键值对的字段名称,键名为表中的字段名,键值为要增加的记录数据值。通过ContentValues对象的put()方法把数据存放到ContentValues对象中。

ContentValues cv = new ContentValues(); //实例化ContentValues用来装载待插入的数据
cv.put("name","Apple"); //添加学生
cv.put("grade","A"); //添加成绩
db.insert("user",null,cv); //执行插入操作

或者

String sql = "insert into students (name,grade) values ('Apple','A');
db.execSQL(sql);

数据删除

delete(String table,String whereClause, String[]  whereArgs)方法
第1个参数table:修改记录的数据表;
第2个参数whereClause:删除数据的条件,相当于SQL语句的where子句;
第3个参数whereArgs:删除条件的参数数组。

String whereClause = "name=?";                  //删除的条件
String[] whereArgs = {"Apple"}; //删除的条件参数
db.delete("students",whereClause,whereArgs); //执行删除

或者

String sql = "delete from students where name='Apple'";
db.execSQL(sql);

数据修改

update(String table,ContentValues values,String whereClause, String[]  whereArgs)方法
第1个参数table:修改记录的数据表;
第2个参数ContentValues:ContentValues对象,存放已作修改的数据的对象;
第3个参数whereClause:修改数据的条件,相当于SQL语句的where子句;
第4个参数whereArgs:修改数据值的数组。

ContentValues cv = new ContentValues();         //实例化ContentValues
cv.put("grade","AA"); //添加要更改的字段及内容
String whereClause = "username=?"; //修改条件
String[] whereArgs = {"Appke"}; //修改条件的参数
db.update("students",cv,whereClause,whereArgs); //执行修改

或者

String sql = "update students set grade = 'AA' where name='Apple'";
db.execSQL(sql);

数据查询

query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having, String orderBy)方法
第1个参数table:查询记录的数据表;
第2个参数columns:查询的字段,如为null,则为所有字段;
第3个参数selection:查询条件,可以使用通配符“?”;
第4个参数selectionArgs:参数数组,用于替换查询条件中的“?”;
第5个参数groupBy:查询结果按指定字段分组;
第6个参数having:限定分组的条件;
第7个参数orderBy:查询结果的排序条件。

db.query("students",null,null,null,null,null,null);

或者

String sql = "select * from students";
db.execSQL(sql);

(五)对查询结果cursor的处理


query()方法查询的数据均封装到查询结果Cursor对象之中,Cursor相当于SQL语句中resultSet结果集上的一个游标,可以向前向后移动。

Cursor对象的常用方法有:

方法

说明

getCount()

获取总记录条数

isFirst()

判断是否第一条记录

isLast()

判断是否最后一条记录

moveToFirst()

移动到第一条记录

moveToLast()

移动到最后一条记录

move(int offset)

移动到指定的记录

moveToNext()

移动到下一条记录

moveToPrevious()

移动到上一条记录

getColumnIndex(String columnName)

获得指定列索引的int类型值

一个例子:

Cursor c = db.query("students",null,null,null,null,null,null);  //查询并获得游标
if(c.moveToFirst()){ //判断游标是否为空
for(int i=0;i<c.getCount();i++){
c.move(i); //移动到指定记录
String name = c.getString(c.getColumnIndex("name");
String grade = c.getString(c.getColumnIndex("grade"));
}
}

SQLite 在 Android 的应用的更多相关文章

  1. sqlite在Android上的一个bug:SQLiteCantOpenDatabaseException when nativeExecuteForCursorWindow

    更多内容在这里查看 https://ahangchen.gitbooks.io/windy-afternoon/content/ ::-/com.company.product W/System.er ...

  2. 利用SQLite在android上实现增删改查

    利用SQLite在android上实现增删改查 方法: 一.直接利用database.execSQL()方法输入完整sql语句进行操作 这种方法适用于复杂的sql语句,比如多表查询等等 这里适合于增删 ...

  3. 利用SQLite在android上创建数据库

    利用SQLite在android上创建数据库 方法: 1.创建我们的数据库类继承SQLiteOpenHelper类 完成相关函数的重写和数据库对象的初始化 public MySQLiteOpenHel ...

  4. sqlite与android交互 (封装)

    学android已经有大概一周时间了吧 ,总感觉自己基础不怎么好,只能通过一点一点积累着敲来巩固平常的知识,有的时候就先不封装的敲一遍,再封装上,有些语句真的记不住,虽然知道他是什么意思,于是乎就反复 ...

  5. Sqlite in Android

    在Android上保存本地数据有三种方式,SharedPreferences.Files和Sqlite.SharedPreferences主要是用来保存键值对形式的程序配置信息,与ini.proper ...

  6. SQLite在Android程序中的使用方法,SQLite的增删查改方法

    Sqlite: 1.一款用来实现本地数据存储的轻量级数据管理工具,是众多用来实现数据库管理的工具之一. 2.Android已经将SQLite的代码功能吸收在它的系统中,我们可以直接在Android程序 ...

  7. 关于SQLite在Android开发中的知识点总结

    一.存放位置 1.内部存储-放在 data/data 底下, 也就是内部存储, 里面的文件以及文件夹是私有的, 其他 app 不能访问, 也随着 app 卸载而删除; 2.放在 sd 卡里面, 如果设 ...

  8. what are Datatypes in SQLite supporting android

    As said at Datatypes In SQLite Version 3: Datatypes In SQLite Version 3 Most SQL database engines (e ...

  9. android安卓Sqlite数据库实现用户登录注册

    看了很多别人写的安卓SQlite数据的操作代码,一点也不通俗易懂,我觉得我写的不错,而且安卓项目也用上了,所以在博客园里保存分享一下!建立一个类 并继承SQLiteOpenHelper public ...

随机推荐

  1. 我理解的数据结构(二)—— 栈(Stack)

    我理解的数据结构(二)-- 栈(Stack) 一.栈基础 栈是一种线性结构 相比较数组,栈对应的操作是数组的子集 只能从一端添加元素,也只能从同一端取出元素,这一端称为栈顶 栈是一种后进先出的数据结构 ...

  2. gitblit 搭建本地git服务器

    本文主要描述gitblit搭建本地服务器

  3. 强悍的 ubuntu —— 命令行访问网页

    所谓以命令行的方式访问网页,即是在终端下以文本的形式访问网站,这里推荐一个工具:w3m, $ sudo apt-get install w3m $ w3m www.baidu.com

  4. JavaSE 学习笔记之多线程(十三)

    多线程: 进程:正在进行中的程序.其实进程就是一个应用程序运行时的内存分配空间. 线程:其实就是进程中一个程序执行控制单元,一条执行路径.进程负责的是应用程序的空间的标示.线程负责的是应用程序的执行顺 ...

  5. 当前,我们的DJANGO项目的requirements.txt文件

    晒一晒,看用得多不多..:) amqp==1.4.7 anyjson==0.3.3 billiard==3.3.0.21 celery==3.1.19 celery-with-redis==3.0 c ...

  6. u-boot-2014.04移植FL2440(使用eclipse编辑uboot)

    1.首先安装eclipse 安装指令 : apt-get install eclipse 使用上面的命令会安装好jdk 和eclipse,eclipse必须在Java环境执行,所以须要安装jdk环境. ...

  7. linux 搭建https server (apache)

    一.  安装准备 1.    安装Openssl  要使Apache支持SSL,须要首先安装Openssl支持.这里使用的是openssl-0.9.8k.tar.gz    下载Openssl:htt ...

  8. Resources.Theme

    public final class Resources.Theme extends Object java.lang.Object    ↳ android.content.res.Resource ...

  9. Android给定坐标计算距离

    给定两点的经纬度.计算两点之间的距离.这里要注意经纬度一定要依照顺序填写 1. 利用android中的工具获得,单位是米 float[] results=new float[1]; Location. ...

  10. ACM Amman Collegiate Programming Contest(7.22随机组队娱乐赛)

    题目链接 https://vjudge.net/contest/240074#overview 只写一下自己做的几个题吧 /* D n^2的暴力dp怎么搞都可以的 这里先预处理 i到j的串时候合法 转 ...