SQlite数据库


简介

SQLite是一款轻型的数据库,关系型数据库;适用于嵌入式,占用资源非常低

  • 支持 ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

  • 支持五种数据类型

    • NULL: 表示该值为NULL值

    • INTEGER: 无符号整型值

    • REAL: 浮点值

    • TEXT: 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE

    • BLOB: 存储Blob数据,该类型数据和输入数据完全相同

  • 其他类型的数据会转换成五种基本数据类型存储

  • SQLite数据库文件存放路径/data/data//databases/

SDK提供的常用接口

接口 功能
SQLiteOpenHelper 抽象类,用于创建数据库和版本更新
SQLiteDatabase 数据库访问类,用于增删改查
Cursor 游标接口,作为返回值

CRUD:其中C代表添加(Create),R代表查询(Retrieve),U代表更新(Update),D代表删除(Delete)

数据库的创建

创建 SQLite 数据库的方法是实现 SQLiteOpenHelper 接口的子类,并且重写 onCreate() 方法,在该方法中执行用于创建 SQLite 数据库的命令

核心类(必要)

  • DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version) 构造函数
  • context:上下文环境(例如一个 Activity)
    • name:数据库名
    • cursorFactory:可选的游标工厂(通常是 Null)
    • version:版本号
  • onCreate(SQLiteDatabase db)初始化数据
  • onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)数据库版本操作
    • db:一个SQLiteDatabase对象
    • oldVersion:旧版本号
    • newVersion:新版本号

关键代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class DatabaseHelper extends SQLiteOpenHelper {    

DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)
{
super(context, name, cursorFactory, version);
}

@Override
public void onCreate(SQLiteDatabase db) {
//数据库第一次创建时被调用
db.execSQL("SQL");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//软件版本号发生改变时调用
db.execSQL("SQL");
}

@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
//打开数据库的回调函数
}
}

获取数据库对象

  • getReadableDatabase(): 返回一个可写数据库,返回一个SQLiteDatabase对象,通过这个对象进行数据库读写操作
  • getWritableleDatabase() : 返回一个可读数据库,返回一个SQLiteDatabase对象,通过这个对象进行数据库写入或读写操作

SQLite 数据库操作

SQLiteDatabase 对象提供了对数据库进行操作的一系列方法

打开或创建数据库

openOrCreateDatabase (Stringpath,SQLiteDatabase.CursorFactory factory)

Stringpath 数据库的路径

SQLiteDatabase.CursorFactory factory 游标

详细可见链接,详细介绍了三种创建方法,以及之间的联系

1
SQLiteDatabase database=SQLiteDatabase.openOrCreateDatabase("/data/data/1.db",null);

增加

insert (String table,String nullColumnHack,ContentValues values)

  • table:表名
  • nullColumnHack: 空列的默认值
  • values: ContentValues封装的键值对组成的Map,key代表列名,value代表该列要插入的值
1
2
3
4
ContentValues values=new ContentValues();
values.put("number", "0");
values.put("name", "zs");
database.insert("table", null, values);

删除

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

  • table:表名
  • whereClause:删除条件
  • whereArgs[]:条件值数组
1
2
3
String whereClause = "username=?";
String[] whereArgs = {"zs"};
db.delete("user",whereClause,whereArgs);

修改

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

  • table:表名
  • values: ContentValues 类型的键值对
  • whereClause:修改条件
  • whereArgs[]:修改的条件值数组
1
2
3
4
5
ContentValues values = new ContentValues();
values.put("name", "zs");
String whereClause = "username=?";
String[] whereArgs = {"ls"};
db.update("user",values,whereClause,whereArgs);

查询

1
query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
  • table:表名

  • columns[]:查询的列所有名称集

  • selection:WHERE之后的条件语句,可以使用占位符

  • selectionArgs:条件语句的参数数组

  • groupBy:指定分组的列名

  • having:指定分组条件,配合groupBy使用

  • orderBy:y指定排序的列名

  • limit:指定分页参数

  • distinct:指定“true”或“false”表示要不要过滤重复值

  • Cursor:返回值,相当于结果集ResultSet

    查询完会返回一个Cursor对象,代表数据集的游标

方法名称 方法描述
close() 关闭游标,释放资源
copyStringToBuffer(int columnlndex, CharArrayBuffer buffer) 在缓冲区中检索请求的列的文本,并将其存储
getColumnCount() 返回所有列的总数
getColumnIndex( String columnName) 返回指定列的名称,如果不存在,就返回-1
getColumnIndexOrThrow(String columnN ame) 从零开始返回指定列的名称,如果不存在,将抛出异常
getColumnName(int columnlndex) 从给定的索引返回列名
getColumnNames() 返回一个字符串数组的列名
getCount() 返回Cursor中的行数
moveToFirst() 移动光标到第一行
moveToLast() 移动光标到最后一行
moveToNext() 移动光标到下一行
moveToPosition(int position) 移动光标到一个绝对的位置
moveToPreviousQ 移动光标到上一行

SQL

以上操作也可以通过直接执行sql语句实现

execSQL (String sql)

关闭

close()

评论基础模式加载中。如需完整体验请针对 disq.us | disquscdn.com | disqus.com 启用代理并 尝试完整 Disqus 模式 | 强制完整 Disqus 模式
    加载更多评论