# 安卓五大存储方式之SQlite

关于重新认识SQlite(一)

虽然做安卓接触到数据库的机会没有后台那么多,但是最近发现还是有蛮多机会会遇到,做了五年安卓倒是提起SQlite还要请教后台的同事,让我感到分外惭愧,所以今天决定重新认识下SQlite。

常用数据库的种类

Oracle、MySQL、SQLSever,SQlite等

SQlite简介

SQlite是目前为止比较流行的开源嵌入式数据库,属于轻量级跨平台的关系型数据库,其主要优势在于灵巧、快速可靠性高,并且占用资源非常低,能够支持多个主流的操作系统,例如Windows/Linux/Unix等等。

Android对于SQlite的使用

Android提供SQLiteOpenHelper.java作为数据库辅助操作工具类

第一步:创建类DatabaseHelper.class(可任意命名)继承SQLiteOpenHelper.java
public class DatabaseHelper extends SQLiteOpenHelper{
    //带全部参数的构造函数,此构造函数必不可少
    // 参数说明
    // context:上下文对象
    // name:数据库名称
    // param:一个可选的游标工厂(通常是 Null) 
    // version:当前数据库的版本,值必须是整数并且是递增的状态
    public DatabaseHelper(Context context, String name, CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        /**
         *创建数据库sql语句并执行  user: 表名称   name: 字段名称
         * 注:数据库实际上是没被创建 / 打开的(因该方法还没调用)
         * 直到getWritableDatabase() / getReadableDatabase() 第一次被调用时才会进行创建 / 打开 
         */ 
        //String sql = "create table user(name varchar(20))";
        String sql = "create table user(id integer primary key auto_increment,name varchar(64))"; 
        db.execSQL(sql);    
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

知识细节延伸
1、id integer primary key auto_increment
id:字段名称
integer :字段类型
primary key:主键
autoincrement:通过设置主键进行自增长,默认从1开始,每次+1

2、SQLite 中有五种存储类型: NULL、INTEGER、REAL、TEXT、BLOB、VARCHAR等
SQLite数据库中的存储类型汇总
表中字段user可以使用text 或者varchar 类型,我选择使用varchar ,因为varchar 可以提供默认值,text 没有。

3、varchar(20)表示:
表示字符数,也就是,不论中文还是英文还是标点,加起来只能有20个。
表中字段名称user可以使用TEXT

第二步:创建数据库

 DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "数据库名称", null, 1);
 db = dbHelper.getWritableDatabase();//可读写的数据库
 // db = dbHelper.getReadableDatabase();//只读数据库

此处我创建的时可读写的数据库

1、SQLiteOpenHelper类 常用方法
  • 创建数据库
    getWritableDatabase()
    创建/打开可读写的数据库(通过 返回的SQLiteDatabase对象 进行操作)

    getReadableDatabase()
    创建/打开可读的数据库(通过 返回的SQLiteDatabase对象 进行操作)

    onCreate(SQLiteDatabase db)
    数据库第1次创建时 则会调用,即 第1次调用 getWritableDatabase() / getReadableDatabase()时调用

    onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    数据库升级时自动调用

    close()
    关闭数据库

  • 数据库操作(增、删、减、查)

    查询数据
    (Cursor) 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:分页查询的限制
    // Cursor:返回值,相当于结果集ResultSet
    使用示例:

 //创建游标对象
Cursor cursor = sqliteDatabase.query("user", new String[] { "id","name" }, "id=?", new String[] { "1" }, null, null, null);
cursor.close()// 关闭游标,释放资源

(Cursor) rawQuery(String sql, String[] selectionArgs)
直接使用SQL语句进行查询的:SQL语句,条件参数
使用示例:

//写法一:
String sql = "select * from user where name=?"; 
Cursor cursor = db.rawQuery(sql, new String[]{"文阿花"});  

//写法二:
String sql = "select * from user where name=文阿花"; 
Cursor cursor = db.rawQuery(sql, null);  

query和rawQuery区别:
query是帮你拼接好了sql语句
rawQuery是使用你自己拼接的sqp语句
query比起rawQuery来说 可以避免因sql拼写错误儿导致的错误

(int) delete(String table,String whereClause,String[] whereArgs)
删除数据行
使用示例:

 //根据主键去删除对应数据
 // 参数1:表名(String)
 // 参数2:WHERE表达式(String),需删除数据的行; 若该参数为 null, 就会删除所有行;?号是占位符
 // 参数3:WHERE选择语句的参数(String[]), 逐个替换 WHERE表达式中 的“?”占位符;
 db.delete("user", "id?",new String[]{"1"});

对应sql语句:

String sql = "delete from user where id="1";
db.execSQL(sql);

(long) insert(String table,String nullColumnHack,ContentValues values)
添加数据行

使用示例:

 //创建存放数据的ContentValues对象  insertData需要插入的内容
 ContentValues values = new ContentValues();
 values.put("id", 1);
 values.put("name", "文阿花");
 //数据库执行插入命令
 db.insert("user", null, values);

对应sql语句:

 String sql = "insert into user (id,name) values (1,'文阿花')";
 db.execSQL(sql)

(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)
更新数据行
使用示例:

 ContentValues values2 = new ContentValues();
 values2.put("name", "文阿花2");
 db.update("user", values2, "id= ?", new String[]{"1"});

对应sql语句:

 String sql = "update [user] set name = '文阿花2' where id="1";
 db.execSQL(sql);

(void) execSQL(String sql)
执行一个SQL语句,可以是一个select or 其他sql语句
使用示例:

  //创建数据库sql语句 并 执行
 String sql = "create table user(name varchar(20))";
 db.execSQL(sql);   

deleteDatabase(“数据库名”);
删除数据库

参考文章

Android:SQLiteOpenHelper类(SQLlite数据库操作)详细解析

SQLite数据库中的存储类型汇总

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值