加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Sqlite从初级认知到高级操作

发布时间:2020-12-12 19:25:25 所属栏目:百科 来源:网络整理
导读:1.什么是Sqlite? 小型的 效率高 开源的 可嵌入 关系型数据库 程序驱动 无数据类型 支持事务操作 独立的跨平台的磁盘文件 代码量少 API简单易用 2.Sqlite数据库数据类型 Integer varchar(10) float double char(10) text 3.SQL语句回顾 3.1创建表的语句 crea

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表是否存在以及字段时候一致

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读