Sqlite从初级认知到高级操作

Posted 一如年少模样

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sqlite从初级认知到高级操作相关的知识,希望对你有一定的参考价值。

1.什么是Sqlite?

小型的 效率高 开源的 可嵌入 关系型数据库 程序驱动 无数据类型 支持事务操作

独立的跨平台的磁盘文件 代码量少 API简单易用

2.Sqlite数据库数据类型

 Integer varchar(10) float double char(10) text

3.SQL语句回顾

3.1创建表的语句

create table表名(字段名称,数据类型,约束,字段名称,数据类型,约束.......)

 create table person(_id Integer primary key,name varchar(10),age Integer not null) 

3.2 删除表的语句

drop table 表名

drop table person

3.3插入数据

insert into 表名[字段,字段] values(值1,值2)

insert into person(_id,age)values(1,20);

insert into person values(1,"小王",20) 这种没有字段的插入值,是从表结构的第一个字段开始依次插入的。

3.4 修改数据

update 表名 set 字段=新值 where 修改的条件

update person set name="yxr",age=22 where _id=1

3.5 删除数据

delete from 表名 where 删除的条件

delete from person where _id=2

3.6 查询数据

select 字段名 from 表名 where 查询条件 group by 分组的字段 having 筛选条件 order by 排序字段

   select * from person;

   select _id,name from person;

   select * from person where _id=1

   select *from person where _id<>1 (不等于)

   select * from person where _id=1 and age>18

   select * from person where name like "%小%" 

   select * from person where age between 10 and 20

   select *from person where age>18 order by _id

4.Sqlite数据库创建

作为安卓内置的数据库,安卓提供了一个SQLiteOpenHelper类,通过这个类,实现相应的回调函数.

onCreate() ------->创建方法 

onUpgrade() ------->数据库升级方法 

onOpen() ------->打开数据库方法

当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,android系统会自动生成一个数据库,接着调用onCreate()方法,onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。

提及到getReadableDatabase(),getWritableDatabase()方法,那么说下这两者的区别吧

getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。

新建一个Helper类继承SQLiteOpenHelper重写相应的方法。

public class mysqliteHelper extends SQLiteOpenHelper 

    /** 构造函数**
     * @param context 上下文对象
     * @param name   表示创建数据库的名称
     * @param  factory 游标工厂
     *  @param  version 表示创建数据库的版本》=1
     *
     */


public MySqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) 
    super(context, name, factory, version);


public MySqliteHelper(Context context)
    super(context,Constant.DATEBASE_NAME,null,Constant.DATEBASE_VERSION);


@Override
/**
* 当数据库创建时回调的函数
* @param sqLiteDatabase 数据库对象
* */
public void onCreate(SQLiteDatabase sqLiteDatabase) 
    Log.i("TAG","onCreate");
    String sql="create table "+Constant.DATEBASE_NAME+"("+Constant._ID+" Integer primary key," +
            ""+Constant.NAME+" varchar(10),"+Constant.AGE+" Integer)";
    sqLiteDatabase.execSQL(sql);//执行sql语句



// 数据库版本更新时的回调函数  (数据库对象,旧版本,新版本)
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) 
    Log.i("TAG","onUpgrade");


@Override
public void onOpen(SQLiteDatabase db) 
    super.onOpen(db);
    Log.i("TAG","onOpen");
 

一般在存放变量时,都选择新建一个类去存放,一方面代码简洁好看,另一方面后期修改也相对容易好找些。

public class Constant 

    public static final String DATEBASE_NAME="info.db";//数据库名称
    public static final  int DATEBASE_VERSION=1;//数据库的版本号
    public static  final String TABLE_NAME="person"; //表名
    public static final  String _ID="_id";
    public static final  String NAME="name";
    public static final  String AGE="age";

通过单列模式来初始化获得helper类对象

public class DbManage 

     public  static  MySqliteHelper helper;

     public  static  MySqliteHelper getInstance(Context context)

          if(helper==null)
              helper=new MySqliteHelper(context);
          
          return helper;
     


这样我们再调用的时候,初始化就可以这么写。

 private MySqliteHelper helper;
 helper=DbManage.getInstance(this);

点击创建数据库按钮,实现如下:

 SQLiteDatabase readableDatabase = helper.getReadableDatabase();

.运行下模拟器 效果图如下



把数据库文件另存到桌面,用可视化软件打开,这地方我使用的是  打开数据库 ,看下person表是否存在以及字段时候一致


以上是关于Sqlite从初级认知到高级操作的主要内容,如果未能解决你的问题,请参考以下文章

01背包—起步动态规划的初级攻略,小王子想带走公主要先解决了这道题!!!

渗透测试工具Nmap从初级到高级使用教程

从初级软件测试,到高级软件测试的必经之路

从初级软件测试,到高级软件测试的必经之路

linux 运维从初级到高级的修炼

真诚分享,前端从初级到高级如何系统化学习