Sqlite:
本节来看一下sqlite在android开发中的使用:
1:and中使用sqlite数据库来作为存储数据三个重要途径之一;
2:and自带;轻量级,小型化,关系型的数据库;
3:一个数据库就是一个文件,需要带着dll文件运行;是本地化的绝佳数据库!
sqlite支持的数据类型:
NULL: 这个值为空值
VARCHAR(n): 长度不固定且其最大长度为 n 的字串,n不能超过 4000。
CHAR(n): 长度固定为n的字串,n不能超过 254。
INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.
REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.
TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).
BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改 变格式。
DATA : 包含了 年份、月份、日期。
TIME: 包含了 小时、分钟、秒。
数据库所在位置:
data/data/<pac_name>/data/
下面
and中处理sqlite的三个重要的类
SQLiteOpenHelper: 创建数据库,管理数据库版本;
SQLiteDatabase: 打开或者创建数据库,执行sql语句,
Cursor: 处理结果集;
SQLiteOpenHelper/SQLiteDatabase/Cursor的详解:
SQLiteOpenHelper:
作用:用于打开或者创建数据库;关键在与这个类可以进行数据库版本管理,对于app迭代升级非常重要;
使用:这个类是抽象类,因此需要声明一个类来继承该类,然后重写相关方法:
例:
public class MySqlManger extends SQLiteOpenHelper{
//构造函数,传递数据库名称即可,如果传入的数据库存在则直接打开,如果不存在则创建一个数据库
public MyOpenHlper(Context context,string name,CusorFactory factory,int version){
super(context,name,factory,version);
//第一个参数为context;
//第二个参数为数据库名称;
//第四个为版本号;当版本号大于上一个版本号的时候onUpGrade()方法就会执行;
}
public void onCreat(SqlLiteDatabase sd){
sd.execSql("执行创建表的语句");
//一般用来实现建表逻辑;
//该方法只会执行一次,新应用执行过后将不会执行该方法;
}
public void onUpGrade(){
//当数据库版本改变之后会执行此函数
一般在次函数中执行更新数据库的操作;
}
}
对该类方法的说明:
1:构造函数:MyOpenHelper(Context context,string name,CusorFactory factory,int version);
context:上下文环境
name:要创建或者要打开的数据库名称
factory:游标工厂
version:当前数据库的版本号;
2:onCreat(SqlLiteDatabase sd)
该方法是在第一次创建数据库的时候才会调用;在强调一遍,是在第一次创建数据库的时候才会调用;
一般在这个方法中放置创建表的代码;
3:void onUpGrade():
当数据库版本发生改变之后才会调用该方法;
多用于app迭代升级之后需要改变数据表单的时候会在这个方法中实现;
4:使用时必须创建该类的实例;
通过实例调用getReadableDatabase()或者getWriteableDatabase()获取SQLiteDatabase实例;
SQLiteDatabase:
作用:用于打开或者创建数据库的连接;以及执行sql语句,或者调用CURD方法执行sql操作;
方法:
1:openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)
静态方法,用于打开或者创建一个数据库,
SQLiteOpenHelper也可以打开或者创建数据库,那有什么区别呢?
最大的区别在于SQLiteOpenHelper可以实现对数据库版本的管控;而openOrCreateDatabase()打开的数据库仅能够实现对数据库的操作;
2:execsql(sql):
可执行原生sql语句;
如果是查询操作返回的是Cursor对象,否则返回的是布尔值;
3:CURD操作:
增加一条数据:
insert(String table_name,String nullColumnHack,ContentValues values);
table_name:表名
nullColumnHack:赋值为null即可
values:ContentValues:用于装载待插入的数据
更新数据:
update(String table_name, ContentValues values, String "where_cause", String[] args);
table_name:表名
values:ContentValues:用于装载待插入的数据
where_cause:删除条件
args:条件参数
删除数据:
delete(String table_name, String where_cause, String[] args);
table_name:表名
where_cause:删除条件
args:条件参数
查询数据:
query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
table:表名称
colums:列名称数组
selection:条件子句,相当于where
selectionArgs:条件语句的参数数组
groupBy:分组
having:分组条件
orderBy:排序类
limit:分页查询的限制
查询2:
rawQuery(String sql, String[] selectionArgs)
:执行查询操作;但是会预编译sql语句,可以放置sql注入;
Cursor:
用于处理结果集:
提供的方法:
getCount() 总记录条数
isFirst() 判断是否第一条记录
isLast() 判断是否最后一条记录
moveToFirst() 移动到第一条记录
moveToLast() 移动到最后一条记录
move(int offset) 移动到指定的记录
moveToNext() 移动到下一条记录
moveToPrevious() 移动到上一条记录
getColumnIndex(String columnName) 获得指定列索引的int类型值