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

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类型值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值