记android学习之路----数据持久化之SQLite

本文介绍了SQLite在Android开发中的使用,包括数据库的创建、管理及版本控制等关键方面,并详细解释了SQLiteOpenHelper、SQLiteDatabase和Cursor这三个核心类的功能与用法。

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类型值
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值