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

  1. private static class DatabaseHelper extends SQLiteOpenHelper {
  2.  
  3. static final String DATABASE_NAME = "College.db";
  4. static final int DATABASE_VERSION = 1;
  5. static final String STUDENTS_TABLE_NAME = "students";
  6. static final String CREATE_DB_TABLE =
  7. " CREATE TABLE " + STUDENTS_TABLE_NAME +
  8. " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
  9. " name TEXT NOT NULL, " +
  10. " grade TEXT NOT NULL);";
  11.  
  12. DatabaseHelper(Context context){
  13. super(context, DATABASE_NAME, null, DATABASE_VERSION);
  14. }
  15.  
  16. @Override
  17. public void onCreate(SQLiteDatabase db)
  18. {
  19. db.execSQL(CREATE_DB_TABLE);
  20. }
  21.  
  22. @Override
  23. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  24. db.execSQL("DROP TABLE IF EXISTS " + STUDENTS_TABLE_NAME);
  25. onCreate(db);
  26. }
  27. }

(二)创建数据库


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

  1. DatabaseHelper database = new DatabaseHelper(this);
  2. SQLiteDatabase db = null;
  3. 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对象中。

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

或者

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

数据删除

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

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

或者

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

数据修改

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

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

或者

  1. String sql = "update students set grade = 'AA' where name='Apple'";
  2. 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:查询结果的排序条件。

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

或者

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

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


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

Cursor对象的常用方法有:

方法

说明

getCount()

获取总记录条数

isFirst()

判断是否第一条记录

isLast()

判断是否最后一条记录

moveToFirst()

移动到第一条记录

moveToLast()

移动到最后一条记录

move(int offset)

移动到指定的记录

moveToNext()

移动到下一条记录

moveToPrevious()

移动到上一条记录

getColumnIndex(String columnName)

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

一个例子:

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

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. Python类中的 私有变量和私有方法

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ...

  2. MongoDB - 认识MongoDB及数据类型

    目录 MongoDB - 认识MongoDB及数据类型 启动 MogoDB的数据 MogoDB的数据类型 1.Object ID : Documents自生成的_id 2.string : 字符串,必 ...

  3. Python-程序的控制结构

    程序的分支结构 >单分支结构 根据判断条件结果而选择不同向前路径的运行方式 if <条件>: <语句块> 代码示例: guess = eval(input()) if g ...

  4. Python基础-奇偶判断调用函数

    编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数 1/1+1/3+...+1/n. 首先写一个n为偶数的函数: def peven(n): s = 0 ...

  5. tipsText表单验证(注册)

    注册表单验证脚本 <script src="/assets/skins/js/jquery-1.11.2.min.js"></script> <scr ...

  6. 【Codeforces 349B】Color the Fence

    [链接] 我是链接,点我呀:) [题意] 让你组成一个只由1~9组成的数字 每个数字需要的paint数字给定. 让你组成一个最大的数字,且所有数字的paint的总和不超过v. [题解] 先求出a中的最 ...

  7. Battlestation Operational

    Battlestation Operational Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. (40). springboot + devtools(热部署)【从零开始学Spring Boot】

    我们之前在在()Spring Boot热部署[从零开始学Spring Boot] (http://412887952-qq-com.iteye.com/blog/2291518 )讲过通过使用spri ...

  9. Python 7 列表 for 字典,嵌套

    列表: 基本格式:变量名 = [元素1,元素2,元素3] 创建:A = ['访客','admin',19]  或  A = list(['armin','admin',19]),  后者更倾向于转换为 ...

  10. Python 2 声明变量 输入输出 练习

    变量: 代指,用于将具体信息对应到一个值,便于反复使用时方便调用.例如  name = ("斯诺登")   变量声明规则:以字母开头的 字母数字下划线的组合.且不能是python代 ...